三 深淺拷貝

2022-09-11 10:12:12 字數 2063 閱讀 4453

目錄

import copy

a = 'aaron'

b = copy.copy(a) # 淺拷貝

c = copy.deepcopy(a) # 深拷貝

# 注意:對於簡單的不可變型別(int、str、bool),淺拷貝和深拷貝是一樣的。

import copy

a = [1, 2, [3, 4], 5]

b = copy.copy(a) # 淺拷貝,只是將a的最外層位址拷貝乙份。

c = copy.deepcopy(a) # 深拷貝,將a的位址和它包含的所有可變型別的位址都拷貝乙份(此處就拷貝了a的位址和其中元素[3, 4]的位址。

print(id(a), id(b), id(c))

print('==='*15)

print(id(a[1]), id(b[1]), id(c[1]))

print('==='*15)

print(id(a[2]), id(b[2]), id(c[2]))

# 輸出結果

66748936 66921096 66921160

*********************************************

8790802010976 8790802010976 8790802010976

*********************************************

66823752 66823752 66920840

import copy

print('元組元素包含可變型別:\n')

a1 = (1, 2, [3, 4], 5)

b1 = copy.copy(a1) # 淺拷貝,和a原來的位址一樣,不進行拷貝。

c1 = copy.deepcopy(a1) # 深拷貝,a的元素包含可變型別,將a的位址和它包含的所有可變型別的位址都拷貝乙份(此處就拷貝了a的位址和其中元素[3, 4]的位址。

print(id(a1), id(b1), id(c1))

print('==='*15)

print(id(a1[1]), id(b1[1]), id(c1[1]))

print('==='*15)

print(id(a1[2]), id(b1[2]), id(c1[2]))

print('\n元組元素不包含可變型別:\n')

a2 = (1, 2, 3, 4, 5)

b2 = copy.copy(a2) # 淺拷貝,和a原來的位址一樣,不進行拷貝。

c2 = copy.deepcopy(a2) # 深拷貝,a的元素為不可變型別,和a原來的位址一樣,不進行拷貝。

print(id(a2), id(b2), id(c2))

print('==='*15)

print(id(a2[1]), id(b2[1]), id(c2[1]))

print('==='*15)

print(id(a2[2]), id(b2[2]), id(c2[2]))

# 輸出結果

元組元素包含可變型別:

57627496 57627496 57981672

*********************************************

8790802010976 8790802010976 8790802010976

*********************************************

66627464 66627464 66724552

元組元素不包含可變型別:

57697824 57697824 57697824

*********************************************

8790802010976 8790802010976 8790802010976

*********************************************

8790802011008 8790802011008 8790802011008

深淺拷貝以及深淺拷貝的方法

先考慮一種情況,對乙個已知物件進行拷貝,編譯系統會自動呼叫一種建構函式 拷貝建構函式,如果使用者未定義拷貝建構函式,則會呼叫預設拷貝建構函式。執行結果 呼叫一次建構函式,呼叫兩次析構函式,兩個物件的指標成員所指記憶體相同,name指標被分配一次記憶體,但是程式結束時該記憶體卻被釋放了兩次,會造成記憶...

拷貝和深淺拷貝

當list2為list的拷貝物件時,list內的可變資料型別變化,list2變化 list內的不可變資料型別變化,list2變化。總之 list變化list2一定變化 list 1,2,3,4,list2 list print list print list2 1,2,3,4,5 1,2,3,4,5...

12 深淺拷貝

複製物件的基本概念 複製乙個物件作為副本,它會開闢一塊新的記憶體 堆記憶體 來儲存副本物件,就像複製檔案一樣.即源物件和副本物件是兩塊不同的記憶體區域.物件具備複製功能,必須實現協議,協議.常用的可複製物件有 nsnumber,nsstring,nsarray,nsdictionary.nsmuta...