python - 为什么循环后列表会改变
问题描述
有一个列表,循环后,它会改变。但我没有做任何改变,只是使用它。
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]]
如果有人告诉我发生了什么以及如何解决这个问题,我真的很感激。
解决方案
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))
推荐阅读
- mysql - 更改订阅 bbpress 论坛的每个 wordpress 用户的电子邮件
- sql - 计算两个日期之间的天数,不包括周末
- swift - 在核心数据中存储经常更改的图像数组的最有效方法
- c - C套接字 - 客户端在服务器端关闭文件描述符后继续读取
- typescript - Typescript 通用接口参数赋值
- html - 渐变在 Microsoft Edge 中未正确显示
- c# - C# 提取/解压缩 .EXE 文件
- wordpress - 在 Azure 应用程序网关后面访问 Wordpress
- java - 如何使用 Netbeans GUI 编辑器检查单击了哪个按钮
- javascript - jQuery Ajax 不在 Safari 上发布