有一个列表,循环后,它会改变。但我没有做任何改变它,只是使用它。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]]如果有人告诉我发生了什么以及如何解决这个问题,我真的很感激。
2 回答

梵蒂冈之花
TA贡献1900条经验 获得超5个赞
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))

DIEA
TA贡献1820条经验 获得超3个赞
如果有人告诉我发生了什么以及如何解决这个问题,我真的很感激。
关于修复这个问题:如果你想b成为 的副本a,你可以使用copy模块:
import copy
a = [[1,1,1,1], [0,0,1,1], [1,1,0,0], [0,0,0,0]]
b = copy.deepcopy(a)
添加回答
举报
0/150
提交
取消