Python更新列出错误!循环

时间:2016-10-22 02:31:54

标签: python arrays list while-loop scope

grid_height = 4
grid_width = 5
cell = [0, 1]
OFFSETS = (1, 0)

col = []

while (cell[0] < grid_height) and (cell[1] < grid_width):
    print cell
    col.append(cell)
    cell[0] += OFFSETS[0]
    cell[1] += OFFSETS[1]

print col

因此,对于这个Python代码,我尝试更新&#34; cell&#34;列出并将每个新值存储到列表中#col;#34;。但是,如果您在Python中运行此代码,那么&#34; cell&#34;打印输出正好是我想要的值,但是当我打印出&#34; col&#34;时,它只是不断重复&#34;的最后一个不需要的超出范围值的值。细胞&#34 ;.我不认为这是一个范围问题,因为while()不会在Python中创建新的范围。

请帮忙!!这可能是一个非常愚蠢的错误,我无法在我的代码中找到!!

1 个答案:

答案 0 :(得分:3)

您将单元格的四个副本附加到 col 。请注意,您没有复制单元格的值:您复制了对象引用!因此,您有四个指向 col 中原始单元格的指针。每次更新单元格时,更新都会影响每个引用...它们都指向同一个对象。

您似乎想要一份单元格。只需更改一行并要求新列表:

col.append(list(cell))

现在您可以获得所需的输出:

[0, 1]
[1, 1]
[2, 1]
[3, 1]
[[0, 1], [1, 1], [2, 1], [3, 1]]