這個問題在這里已經有了答案: 在 Python 中復制嵌套串列 2 個回答 4 小時前關閉。
我正在擺弄串列,但我不明白為什么串列的副本會修改原始串列。
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)
當我運行這段代碼時,盡管我只修改了 newList,但 originList 和 newList 發生了變化。我試過使用 .copy()、list(originList) 和 originList[:],但這些似乎都不起作用。我還在用 Python 3.9.6 我該怎么辦?
uj5u.com熱心網友回復:
它不起作用的原因是它的副本只產生一個淺拷貝。您只是在創建一個指向記憶體中相同資料的新變數。試試這個而不是你的復制行。
import copy
newList = copy.deepcopy(originalList)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/351689.html
上一篇:反轉包含2個以上元素的元組
