這個問題在這里已經有了答案: 淺拷貝、深拷貝和普通賦值操作有什么區別? (11 個回答) 11 小時前關閉。
我試圖將一個串列復制到另一個串列 6 次。我正在使用:
for i in range(6):
sides[i] = cubes.copy()
這將生成一個包含 6 個串列副本的cubes串列,該串列不應鏈接/不應參考同一個物件,而是具有相同內容的六個不同串列,但是當我運行整個程式(如下所列)時,這似乎不是真的。我包含了列印當前值的列印陳述句,很明顯,由于某種原因,一個更改會影響所有 6 個串列。
這是整個代碼:
def sideArray():
cubes = [[-4, 8, -4, 4, 16, 4],
[-4, -4, -2, 4, 8, 2],
[-8, -4, -2, -4, 8, 2],
[4, -4, -2, 8, 8, 2],
[-4, -16, -2, 0, -4, 2],
[0, -16, -2, 4, -4, 2]]
sides = [[], [], [], [], [], []]
for i in range(6):
sides[i] = cubes.copy()
print(sides)
print(sides[0] is cubes)
for i in range(6):
print()
for j in range(6):
if i < 3:
sides[i][j][i] = cubes[j][i 3]
print(f"sides[{i}][{j}][{i}] is now cubes[{j}][{i 3}] ({cubes[j][i 3]}).")
else:
sides[i][j][i] = cubes[j][i-3]
print(f"sides[{i}][{j}][{i}] is now cubes[{j}][{i-3}] ({cubes[j][i-3]}).")
print(f"is {sides[i]}")
print(f"full: {sides}")
return sides
if __name__ == '__main__':
print(sideArray())
它應該獲取立方體串列中的每個立方體(由 2 個角定義)并在邊串列中創建 6 個串列,每個串列都是立方體的一側(例如,如果一個立方體是從 0、0、0 到 1 , 1, 1 第一個串列將包含 1, 0, 0; 1, 1, 1,定義立方體的左側。)如果有更好的方法來做到這一點,請告訴我。
uj5u.com熱心網友回復:
正如評論中所建議的,copy()就是所謂的淺拷貝。嵌套結構仍然只在淺復制時參考。為了完全復制嵌套資料結構,您需要使用deepcopy內置copy模塊:
from copy import deepcopy
sides = [deepcopy(cubes) for _ in range(6)]
uj5u.com熱心網友回復:
問題是所有串列都指向同一個原始串列。將您的串列傳遞給 python 的內置list()函式,以在不參考原始串列的情況下創建新串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/323927.html
