gpt4 book ai didi

python - 为什么其他列表也发生变化?

转载 作者:太空宇宙 更新时间:2023-11-03 17:17:54 25 4
gpt4 key购买 nike

我已经解决了欧拉计划的问题5(可以被1到20的所有数字整除(没有余数)的最小正数是多少?),但我想找到一种更快的方法(目前0.000109195709229 秒)。

我尝试了一种动态方法,但是当我运行下面的代码时(这只是第一部分),我不明白为什么如果我明确地d[var][counter]会得到+1写入d[i][counter] += 1

n = 20
d = {1:[0,1] + [0]*19} #a dictionary that assigns to each number a list of its prime factorization
for i in xrange(2,3): #I changed n+1 with 3 for simplicity
var = i
counter = 2
notDone = True
while notDone:
if var % counter == 0:
var /= counter
print var, d[var]
d[i] = d[var] #i has the same prime factorization of var ...
print var, d[var]
d[i][counter] += 1 #... except for 1 number (counter)
print var, d[var] #wtf?
notDone = False
else:
counter += 2 if counter != 2 else 1

这是结果:

1 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
1 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
1 [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

为什么会发生这种情况?

最佳答案

在线上

d[i] = d[var]

变量d[i]将保存与d[var]相同的列表对象,因为列表是可变的

相反,您需要 d[var]副本,您可以获得例如通过

d[i] = d[var][:]

关于python - 为什么其他列表也发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33466550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com