Python列表通过循环写入,所有以前的值都被覆盖

时间:2014-02-13 19:45:27

标签: python loops python-2.7

我对python很新,所以如果这是一个相当noob的问题,我很抱歉。但是我正在编写一个由.txt文件中带有for循环的数据组成的2D列表(所有代码都可以工作),但是循环似乎每次都会覆盖我以前写过的所有数据,即使我是

这不是我的实际代码,但总结了我遇到的问题。

stuff = [[None]*3]*10

for index in range(10):
    stuff[index][2]=index

print(stuff)

[[None, None, 9],[None, None, 9],[None, None, 9],[None, None, 9],[None, None, 9],[None, None, 9],[None, None, 9],[None, None, 9],[None, None, 9]]

为什么所有值都返回为9,为什么我必须做什么才能让它返回

[[None, None, 1],[None, None, 2],[None, None, 3],[None, None, 4],[None, None, 5],[None, None, 6],[None, None, 7],[None, None, 8],[None, None, 9]]

2 个答案:

答案 0 :(得分:1)

您要在列表中放置十次相同的确切数组。更新其中一个阵列正在更新所有阵列。尝试:

stuff = [[None]*3 for i in xrange(10)]

答案 1 :(得分:1)

发生这种情况的原因是因为你的第一行:

stuff = [[None]*3]*10

这实际上只是创建1数组[[None]*3],然后引用它10次。

所以你的数组实际上类似于:

[[[None]*3], reference 0, reference 0, reference 0, reference 0, reference 0, reference 0, reference 0, reference 0, reference 0]

将您的第一行更改为:

stuff = [[None]*3 for i in xrange(10)]

这将在数组中的每个位置创建一个唯一元素。