python - 如何计算/更新python中嵌套列表的值?
问题描述
我真的陷入了一个问题,我完全不明白为什么输出是它的样子,而不是我所期望的。我基本上想计算仅用零初始化的嵌套列表的元素的值。这是我的问题的简单形式的代码:
aa = [[0] * 2] * 2
for i in range(2):
for j in range(2):
for k in range(0, 10):
aa[i][j] += k
我在这里期望“aa”的输出为:[[45, 45], [45, 45]]。
但输出是: [[90, 90], [90, 90]]
这个怎么可能?任何解释都会有所帮助。调试后,我看到 Python 总是将 k 添加到列表中的两个列表中,尽管例如 i 当前为 0。
解决方案
那是因为列表的浅拷贝。aa = [[0] * 2] * 2
创建浅拷贝,试试aa = [[0]*2 for i in range(2)]
aa = [[0]*2]*2
print(aa[0]) #[0,0]
print(aa[1]) # [0,0]
aa[0][0] = 2
aa[0][1] = 2
print(aa[0]) #[2,2]
print(aa[1]) # [2,2] !!
# +-------+-------+
# | aa[0] | aa[1] |
# +-------+-------+
# | |
# | |
# \ /
# [0 , 0]
# Both referring to the same list
# So whatever operation you do in aa[0] will reflect in aa[1] and vice versa
# Because effectively they are pointing to same list
# id(aa[0]) == id(aa[1]) ---> True
aa = [[0]*2 for i in range(2)]
for i in range(2):
for j in range(2):
for k in range(0, 10):
aa[i][j] += k
[[45, 45], [45, 45]]
推荐阅读
- javascript - ...Array.from 输出仅显示数组中的最后一个条目。将 JSON 转换为新的对象形式
- java - 日志中经常看到的Kafka FETCH_SESSION_ID_NOT_FOUND
- json - 如何使用 global.asa 文件中的 javascript 从本地 json 文件中读取 json 数组?
- python - 未知时间增量/日期时间格式
- javascript - 如何以角度导入外部javascript库?
- javascript - 我怎样才能让这个 If 语句返回 true?
- javascript - 如何在旁边的跨度中显示“数字类型输入”的值
- c# - 在 IIS 上运行的 ASP.Net WebAPI 应用程序上出现间歇性 NullReferenceException
- javascript - 如何显示图表中每个点的 Y 轴刻度
- android - Android 10 (Q) 中主栏的高度