python 深淺拷貝總結

2021-10-13 05:38:25 字數 655 閱讀 1642

關於deepcopy和copy:

1)copy就是淺copy,意思是把物件a的所有內容,找到乙個記憶體空間再存放乙份,再賦值為新的變數。比如:

a=[1,2,3]

from copy import copy

cpy_a = copy(a)

注意區分:copy和賦值,賦值是簡單的寫了個別名,比如:

a=[1,2,3]

b=a

此時id(a)如果是6123l,那麼id(b)也是6123l,兩者的位址一樣,只是名字不同,與淺copy是不一樣的

2)deepcopy就是深拷貝,針對只含有值的物件來說,淺copy就可以滿足,但如果乙個物件中又含有其他物件,使用淺copy就只會把包含的id給複製乙份,那麼對新物件的內容的操作就會影響到舊物件的內容。此時就只能使用深copy,即遞迴查詢引用物件,找到記憶體單元,拷貝內容並開闢記憶體空間,再存放乙份。

a=[1,2]

b=[a,a]#這裡是直接引用,就是物件包含物件,想拷貝只能使用深拷貝

from copy import deepcopy

c=deepcopy(b)

只是自己方便學習,不用於它用!

python 深淺拷貝總結

賦值 就類似於兩個標籤貼到同一記憶體位址上,源資料型別改,賦值的型別也改 淺拷貝 外邊的殼記憶體位址永遠不一樣,他只拷貝了元素第一層的位址,只有 修改 拷貝資料的第一層的時候 源資料不改變,給可變資料型別進行新增的時候源資料會受到影響。可變資料型別能夠新增和修改,不可變資料型別只能修改 第二層 可變...

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...