如何修改此python for循环?

cuo*_*tnk 2 python loops for-loop

我在python中的for循环中有奇怪的行为.问题不是这个问题,而是非常类似于:

a = []
b = [1,2,3,4]
for i in xrange (0,10):
     a.append(b)
     b[3] += 1
Run Code Online (Sandbox Code Playgroud)

结果是:

a = [[1,2,3,14],[1,2,3,14],[1,2,3,14],[1,2,3,14],[1,2,3,14],[1,2,3,14],[1,2,3,14],[1,2,3,14],[1,2,3,14],[1,2,3,14]]
Run Code Online (Sandbox Code Playgroud)

我期待的结果是

a =  [[1,2,3,4],[1,2,3,5],[1,2,3,6],[1,2,3,7],.....,[1,2,3,14]]
Run Code Online (Sandbox Code Playgroud)

我不知道为什么在每次迭代时,b [3]最多加14,然后列表[1,2,3,14]被添加到a.我认为b [3]在每次迭代时应该只增加1

bde*_*dew 7

您的问题是每次迭代都会附加对同一个数组的引用,并不断更改它.

最简单的解决方法是将附加更改为

 a.append(list(b))
Run Code Online (Sandbox Code Playgroud)

这将使每次迭代都将(浅)副本附加到目标数组,而不是引用.