深拷貝 淺拷貝

2021-09-12 03:53:47 字數 871 閱讀 7789

使用內建函式:copy(淺拷貝)、deepcopy(深拷貝)。

拷貝:新開闢一段空間用來儲存新的物件。而深淺拷貝的區別在於:

淺拷貝:不拷貝子物件的內容,只是拷貝子物件的引用。

深拷貝:會連子物件的記憶體也全部拷貝乙份,對子物件的修改不會影響源物件。

import copy

a = [1,2,3,4]

b = ['a','b',a]

c = b[:] #相當於 c = copy.copy(b)

d = copy.deepcopy(b)

print(b,'\t',c,'\t',d)

print(b,'\t',c,'\t',d)

print("c是不是b的淺拷貝:",b[2] is c[2])

print("c是不是b的深拷貝:",b[2] is d[2])

print(id(b[2]),'\t',id(c[2]),'\t',id(d[2]))

結果演示:

['a', 'b', [1, 2, 3, 4]] 	 ['a', 'b', [1, 2, 3, 4]] 	 ['a', 'b', [1, 2, 3, 4]]

['a', 'b', [1, 2, 3, 4, 'abc'], 'c'] ['a', 'b', [1, 2, 3, 4, 'abc']] ['a', 'b', [1, 2, 3, 4]]

c是不是b的淺拷貝: true

c是不是b的深拷貝: false

1877574659976 1877574659976 1877604567560

淺拷貝 深拷貝

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