Python深淺拷貝

2021-09-04 04:39:08 字數 1424 閱讀 6123

深淺拷貝分為兩部分,一部分是數字和字串另一部分是列表、元組、字典等其他資料型別。

對於數字字串而言,賦值、淺拷貝和深拷貝無意義,因為他們的值永遠都會指向同乙個記憶體位址。

# 匯入copy模組》 import copy# 定義乙個變數var1>>> var1 = 123

# 輸出var1的記憶體位址》 id(var1)1347747440>>> var2 = var1

# var2的記憶體位址和var1相同》 id(var2)1347747440

# 淺拷貝》 var3 = copy.copy(var1)

# var3的記憶體位址和var1相同》 id(var3)1347747440

# 深拷貝》 var4 = copy.deepcopy(var1)# var4的記憶體位址和var1相同》 id(var4)1347747440

對於字典、元祖、列表 而言,進行賦值、淺拷貝和深拷貝時,其記憶體位址的變化是不同的。

var1 = 

賦值

賦值,只是建立乙個變數,該變數指向原來記憶體位址,如:

>>> var1 = >>> var2 = var1>>> id(var1)1937003361288>>> id(var2)1937003361288

如圖所示:

淺拷貝 淺拷貝,在記憶體中只額外建立第一層資料

# 匯入拷貝模組》 import copy>>> var1 = 

# 使用淺拷貝的方式》 var2 = copy.copy(var1)

# 兩個變數的記憶體位址是不一樣的》 id(var1)2084726354952>>> id(var2)2084730248008# 但是他們的元素記憶體位址是一樣的》 id(var1["k1"])2084726207464>>> id(var2["k1"])2084726207464

如圖所示:

深拷貝 深拷貝,在記憶體中將所有的資料重新建立乙份(排除最後一層,即:python內部對字串和數字的優化)

# 匯入拷貝模組》 import copy>>> var1 = 

# 使用深拷貝的方式把var1的內容拷貝給var2>>> var2 = copy.deepcopy(var1)

# var1和var2的記憶體位址是不相同的》 id(var1)1706383946760>>> id(var2)1706389852744

# var1和var2的元素"k3"記憶體位址是不相同的》 id(var1["k3"])1706389853576>>> id(var2["k3"])1706389740744# var1和var2的"k3"元素的記憶體位址是相同的》 id(var1["k3"][1])1706383265744>>> id(var2["k3"][1])1706383265744

如圖所示:

python 深淺拷貝案例 python 深淺拷貝

深淺拷貝 對於 數字 和 字串 而言,賦值 淺拷貝和深拷貝無意義,因為其永遠指向同乙個記憶體位址 import copy a1 22255 a2 22255 print id a1 id a2 3428240 3428240 對於字典 元祖 列表 而言,進行賦值 淺拷貝和深拷貝時,其記憶體位址的變化...

python 深淺拷貝

建立乙個寬度為3,高度為4的陣列 mylist 0 3 4 0,0,0 0,0,0 0,0,0 0,0,0 但是當操作mylist 0 1 1時,發現整個第二列都被賦值,變成 0,1,0 0,1,0 0,1,0 0,1,0 list n n shallow copies of list concat...

python深淺拷貝

python 深淺拷貝 shallow copy 和 deep copy 對於乙個列表,列表裡面可以再放入乙個列表 1 若想複製這乙個列表,使用列表的普通的copy 方法,只能拷貝出列表裡表層的元素,而列表裡的列表卻無法拷貝,只能指向前乙個列表.修改拷貝出的列表裡列表裡的元素,原來的列表會發生改變....