深拷貝和淺拷貝

2021-08-19 06:29:41 字數 873 閱讀 8124

深拷貝:

對乙個物件所有的層次遞迴的拷貝,深拷貝可以通過copy.deepcopy()來實現

淺拷貝:

只對乙個物件的頂層進行了拷貝,淺拷貝可以通過copy.copy()來實現

請看下面淺拷貝的示例:

c列表裡面巢狀了兩個列表a和b,然後對c進行淺拷貝並賦值給d, 然後檢視c和d的id我們可以發現他們的id並不一樣,說明淺拷貝對物件c的頂層完成了拷貝,接下來又分別檢視了列表c中的a和列表d中的a發現他們的id一致,則說明淺拷貝沒有對物件的裡層實現拷貝,而只是拷貝了乙個引用指向了a.

a = [1,2]

b = [2,3]

c = [a, b, 22]

d = copy.copy(c)

id(c)

58627144

id(d)

58627400

id(c[1])

58182280

id(d[1])

58182280

請看下面深拷貝示例:

同樣的例子只是這次是對c進行了深拷貝,可以發現c中a和d中的a的id不一樣,即深拷貝是對物件的所有層次完成了遞迴的拷貝

>>> import copy

>>> a = [1,2]

>>> b = [2,3]

>>> c = [a, b, 22]

>>> d = copy.deepcopy(c)

>>> id(c)

58182152

>>> id(d)

58419976

>>> id(c[1])

58420040

>>> id(d[1])

56835400

深拷貝和淺拷貝

淺拷貝就是物件的資料成員之間的簡單賦值,如你設計了乙個沒有類而沒有提供它的複製建構函式,當用該類的乙個物件去給令乙個物件賦值時所執行的過程就是淺拷貝,如 class a a private int data int main 這一句b a 就是淺拷貝,執行完這句後b.data 5 如果物件中沒有其他...

淺拷貝和深拷貝

以下情況都會呼叫拷貝建構函式 乙個物件以值傳遞的方式傳入函式體 例如 已知class a,class b void func a a void func a a func b b 此時函式對b的操作是呼叫拷貝建構函式後的臨時拷貝物件。多數傳指標 乙個物件以值傳遞的方式從函式返回 如 return b...

深拷貝和淺拷貝

ios提供了copy和mutablecopy方法,顧名思義,copy就是複製了乙個imutable的物件,而mutablecopy就是複製了乙個mutable的物件。以下將舉幾個例子來說明。1 系統的非容器類物件 這裡指的是nsstring nsnumber等等一類的物件。nsstring stri...