參考原文
(1)數字和字串的拷貝
a1 = 123123
a2 = 123123
輸出結果是:
1959780298352
1959780298352
import copy # 使用淺拷貝需要匯入copy模組
a1 =
123123
a3 = copy.copy(a1)
# 使用copy模組裡的copy()函式就是淺拷貝了
print(id
(a1)
)print(id
(a3)
)>>
35233168
>>
35233168
import copy
a1 =
123123
a4 = copy.deepcopy(a1)
# 深拷貝是用copy模組裡的deepcopy()函式
print(id
(a1)
)print(id
(a4)
)>>
31432080
>>
31432080
檢視結果發現,對於深拷貝,數字和字串在記憶體當中用的也是同一塊位址。
# 淺拷貝
print()
print(id
(n1)
)print(id
(n3)
)print()
print(id
(n1[
"k3"])
)print(id
(n3[
"k3"])
)
通過以上結果可以看出,進行淺拷貝時,我們的字典第一層n1和n3指向的記憶體位址已經改變了,但是對於第二層裡的列表並沒有拷貝,它的記憶體位址還是一樣的。原理如下圖:
結論:所以對於淺拷貝,字典、列表、元組等型別,它們只拷貝第一層位址。
import copy
n1 =
n4 = copy.deepcopy(n1)
# 深拷貝
print()
print(id
(n1)
)print(id
(n4)
)print()
print(id
(n1[
"k3"])
)print(id
(n4[
"k3"])
)輸出結果:
31157560
35463600
35947144
35947336
通過以上結果發現,進行深拷貝時,字典裡面的第一層和裡面巢狀的位址都已經變了。對於深拷貝,它會拷貝多層,將第二層的列表也拷貝乙份,如果還有第三層巢狀,那麼第三層的也會拷貝,但是對於裡面的最小元素,比如數字和字串,這裡就是「wu」,123,「alex」,678之類的,按照python的機制,它們會共同指向同乙個位置,它的記憶體位址是不會變的。原理如下圖:
參考原文
Python基礎之六 深淺拷貝問題
1 l1 1 晴朗 2,小明 l2 l1 print l1 is l2 true l1 2 0 3 print l2 1,晴朗 3,小明 4 print l2 1,晴朗 3,小明 4 3 分析 1 建立了乙個名為l1的變數,這個變數指向乙個list物件 2 把l1的值賦值給l2,那麼l2變數將指向l...
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...