为什么循环后列表会改变

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


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]]


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


月关宝盒
浏览 233回答 2
2回答

梵蒂冈之花

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

如果有人告诉我发生了什么以及如何解决这个问题,我真的很感激。关于修复这个问题:如果你想b成为 的副本a,你可以使用copy模块:import copya = [[1,1,1,1], [0,0,1,1], [1,1,0,0], [0,0,0,0]]b = copy.deepcopy(a)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python