【发布时间】:2021-11-07 12:13:11
【问题描述】:
我在摆弄列表,我不明白为什么列表的副本会修改原始列表。
winC 是一组将修改给定列表的参数。
originList 保持不变。
那么newList就是originList的一个拷贝,这样我就可以修改它并和之前的比较结果了。
winC = [[[1, 1, 1], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [1, 1, 1], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [1, 1, 1]],
[[1, 0, 0], [1, 0, 0], [1, 0, 0]],
[[0, 1, 0], [0, 1, 0], [0, 1, 0]],
[[0, 0, 1], [0, 0, 1], [0, 0, 1]],
[[1, 0, 0], [0, 1, 0], [0, 0, 1]],
[[0, 0, 1], [0, 1, 0], [1, 0, 0]]]
originList = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
newList = originList.copy()
print(originList)
print(newList)
for x in range(len(winC)):
for y in range(len(winC[x])):
for z in range(len(winC[x][y])):
if winC[x][y][z] == 1:
newList[y][z] += 1 ## Note that newList is being modified, not originList
print(originList)
print(newList)
当我运行这段代码时,originList 和 newList 发生了变化,尽管我只修改了 newList。我尝试过使用 .copy()、list(originList) 和 originList[:],但这些似乎都不起作用。我仍在使用 Python 3.9.6 我该怎么办?
【问题讨论】:
-
你需要一个
deepcopy()。 -
你可以阅读更多关于Shallow vs deepcopy
-
是的,就是这样。应该开始阅读,谢谢!
标签: python python-3.x list