首页 > 解决方案 > 为什么循环后列表会改变

问题描述

有一个列表,循环后,它会改变。但我没有做任何改变,只是使用它。

a = [[1,1,1,1], [0,0,1,1], [1,1,0,0], [0,0,0,0]]
b = a[:]
for i in range(4):
    for j in range(4):
       b[i][j] = a[j][i] 

然后 a 变为 [[1, 0, 1, 0], [0, 0, 1, 0], [1, 1, 0, 0], [0, 0, 0, 0]]

如果有人告诉我发生了什么以及如何解决这个问题,我真的很感激。

标签: pythonpython-3.x

解决方案


b不是它的深层副本,a它只是保存对相同数组的引用a。当您更改 中的孩子时,b您正在更改 中的相同元素a

您不需要先复制数组。由于您要按顺序向 b 添加元素,因此您可以随时追加:

a = [[1,1,1,1], [0,0,1,1], [1,1,0,0], [0,0,0,0]]
b = []
for i in range(4):
    b.append([])
    for j in range(4):
        b[i].append(a[j][i])

您还可以通过以下方式更简单地获得相同的结果:

a = [[1,1,1,1], [0,0,1,1], [1,1,0,0], [0,0,0,0]]
list(zip(*a))

推荐阅读