为了账号安全,请及时绑定邮箱和手机立即绑定

为什么循环后列表会改变

为什么循环后列表会改变

月关宝盒 2021-12-29 19:30:09
有一个列表,循环后,它会改变。但我没有做任何改变它,只是使用它。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))


查看完整回答
反对 回复 2021-12-29
?
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)


查看完整回答
反对 回复 2021-12-29
  • 2 回答
  • 0 关注
  • 232 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号