python - python:分配并读出二维列表的值
问题描述
这是一段python代码:
a = [[0]*3]*4
for i in range(4):
for j in range(3):
a[i][j] = i+j
print(a[i][j])
print(a)
但是,两个打印的输出是不同的。
前一个打印我想要的。第二个打印的 4 个子列表都一样。
看来是浅拷贝的问题。我真的不明白它是如何以及为什么会发生的。
更新:
在我解决了这个问题之后,我发现了另一个问题:
a = [[0]*3]*4
for i in range(4):
a[i] = [i, 2*i, 3*i]
结果也是我想要的。我再次对此感到困惑。
谁能告诉我区别?
解决方案
a = [[0]*3]*4
for i in range(4):
for j in range(3):
a[i][j] = i+j
print(a)
print(a[i][j])//show the execution at every step
print(a)
在每一步,具有相同列的列表都会更新为相同的值。输出是
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
0
[[0, 1, 0], [0, 1, 0], [0, 1, 0], [0, 1, 0]]
1
[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
2
[[1, 1, 2], [1, 1, 2], [1, 1, 2], [1, 1, 2]]
1
[[1, 2, 2], [1, 2, 2], [1, 2, 2], [1, 2, 2]]
2
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
3
[[2, 2, 3], [2, 2, 3], [2, 2, 3], [2, 2, 3]]
2
[[2, 3, 3], [2, 3, 3], [2, 3, 3], [2, 3, 3]]
3
[[2, 3, 4], [2, 3, 4], [2, 3, 4], [2, 3, 4]]
4
[[3, 3, 4], [3, 3, 4], [3, 3, 4], [3, 3, 4]]
3
[[3, 4, 4], [3, 4, 4], [3, 4, 4], [3, 4, 4]]
4
[[3, 4, 5], [3, 4, 5], [3, 4, 5], [3, 4, 5]]
5
[[3, 4, 5], [3, 4, 5], [3, 4, 5], [3, 4, 5]]
推荐阅读
- django - 如何告诉 Django 我已经覆盖了第三方应用程序
- highcharts - 如何在高图甘特图的工具提示中显示依赖项的数据?
- sql - 我想在下面存储的 PROC 中参数化 TABLE_TO_BE_DELETED 表
- macos - 在 Unity 中,如何解决错误“plugin.bundle 已损坏,无法打开。您应该将其移至 Bin”?
- terraform - Terraform:使用 AWS ECS 服务附加多个目标组时出现 IAM 角色错误
- vaadin - 如何在提供文件以供 vaadin 下载之前通过 StreamResource 提供等待图像/弹出窗口
- javascript - 当输入的大小增加时如何使按钮移动
- embedded-linux - 更改我系统的通用 I/O 的角色
- node.js - Strapi Heroku 部署无法连接到 MongoDB
- ggplot2 - 如何在 R 中的 position_dodge2 之后消除条之间的额外空格