深拷貝 淺拷貝

2021-10-04 13:40:18 字數 932 閱讀 2173

d = c[:] 與 d= copy.copy( c )一樣,屬於淺拷貝

淺拷貝對不可變型別和可變型別的copy不同

copy.copy對於可變型別,會進行淺拷貝

copy.copy對於不可變型別,不會拷貝,僅僅是指向

如果copy.copy拷貝的是元組,那麼它不會進行淺拷貝,僅僅是指向。

原因:因為元組是不可變型別,那麼意味著資料一定不能修改,因此用copy.copy的時候它會自動判斷,如果是元組它就是指向了。

deepcopy,如果拷貝的內容都是不可變型別,那麼它也不進行拷貝,如果只要有乙個可變型別,那麼它一定會遞迴著拷貝所有內容

a =[11

,22]b =[33

,44]c =

(a,b)

d = copy.copy(c)

# 如果c是元組,那麼copy時會僅僅是元組的引用copy,

# 而deepcopy依然是深copy,即遞迴copy所有,因為此時雖然c是不可變型別,但是其指向可變型別的a,b。

d =(11,

22)e =copy.copy(d)

id(d)

=123456

id(e)

=123456

如果copy.copy拷貝的是元組,那麼它不會進行淺拷貝,僅僅是指向。

原因:因為元組是不可變型別,那麼意味著資料一定不能修改,因此用copy.copy的時候它會自動判斷,如果是元組它就是指向了。

如果 用copy.copy、copy.deepcopy對乙個全部都是不可變型別的資料進行拷貝,那麼他們結果相同,都是引用指向。

如果拷貝的是乙個擁有 不可變型別的資料,即使元組是最頂層,那麼deepcopy依然是深拷貝,而copy.copy還是指向。

淺拷貝 深拷貝

copy mutablecopy copy 不管是可變的,還是不可變的,結果都是不可變的 mutablecopy 不管是不可變的,還是可變的,結果都是可變的 nsmutablestring str nsmutablestring stringwithformat a nsarray arr1 str...

深拷貝 淺拷貝

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...

淺拷貝 深拷貝

retain是建立乙個指標,引用物件計數加1。copy屬性表示兩個物件內容相同,新的物件retain為1 與舊有物件的引用計數無關,舊有物件沒有變化。copy減少物件對上下文的依賴。retain屬性表示兩個物件位址相同 建立乙個指標,指標拷貝 內容當然相同,這個物件的retain值 1也就是說,re...