我試圖以一種簡單的方式在 python 中創建一個串列矩陣,但結果它是錯誤的(方法 1),而不是復制串列行,它實際上只是復制串列地址。任何人都可以深入解釋這一點嗎?我試圖實作的是方法 2,但我不明白為什么方法 1 不起作用。
謝謝,
# method 1
res=[[None]*4]*4
res[1][0]=-1
print(id(res[0]))
print(id(res[1]))
print(id(res[2]))
print(id(res[3]))
# output 1
140475957049792
140475957049792
140475957049792
140475957049792
# method 2
res=[[None for j in range(4)] for i in range(4)]
res[1][0]=-1
print(id(res[0]))
print(id(res[1]))
print(id(res[2]))
print(id(res[3]))
# output 2
140475957617344
140475957617280
140475957617216
140475957617152
uj5u.com熱心網友回復:
因為你的第一個代碼制作了 python-object[None]*4并復制了這個物件的鏈接 4 次。它不是深拷貝。
第二個代碼 4 次使其他物件與串列理解相關聯。它不是復制品。
uj5u.com熱心網友回復:
希望我能以你清楚的方式回答這個問題。讓我們從呼叫res=[[None]*4]*4. 在此示例中,您將使用串列物件 [None] 4 次。并形成一個外部串列 [[None],[None], [None], [None]] 并制作該串列的 4 個副本。當您列印這四個串列的 id 時,它們指向相同的物件 id。
在您的第二個示例中,您使用串列理解為每個序列創建新物件,因此您為每個串列獲得不同的 id。
如果對 1 個單元格進行更改,例如 res[1][1] = 1,然后列印 res,您可以自己演示這些差異。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/382194.html
上一篇:程式列印總和最高的數字
下一篇:值不堅持串列的回傳值(C#)
