深淺拷貝詳解

2022-03-16 22:17:24 字數 3499 閱讀 3628

字典淺拷貝例項例項1

2345

67>>>a=

>>> b=a.copy()

>>> a, b

(, )

>>> a[14)

>>> a, b

(, )

深度拷貝需要引入 copy 模組:例項1

2345

67>>>importcopy

>>> c=copy.deepcopy(a)

>>> a, c

(, )

>>> a[15)

>>> a, c

(, )

1、b = a:賦值引用,a 和 b 都指向同乙個物件。

2、b = a.copy():淺拷貝, a 和 b 是乙個獨立的物件,但他們的子物件還是指向統一物件(是引用)。

3、b = copy.deepcopy(a):深度拷貝, a 和 b 完全拷貝了父物件及其子物件,兩者是完全獨立的。

以下例項是使用 copy 模組的 copy.copy( 淺拷貝 )和(copy.deepcopy ):例項1

2345

6789

1011

1213

1415

1617

#!/usr/bin/python

# -*-coding:utf-8 -*-

importcopy

a=[1,2,3,4, ['a','b']]#原始物件

b=a#賦值,傳物件的引用

c=copy.copy(a)#物件拷貝,淺拷貝

d=copy.deepcopy(a)#物件拷貝,深拷貝

5)#修改物件a

a[4'c')#修改物件a中的['a', 'b']陣列物件

print('a = ', a )

print('b = ', b )

print('c = ', c )

print('d = ', d )

以上例項執行輸出結果為:12

34a=[1,2,3,4, ['a','b','c'],5]

b=[1,2,3,4, ['a','b','c'],5]

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

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

深淺拷貝 詳解

concat 注意 關於array的slice和concat方法的補充說明 array的slice和concat方法不修改原陣列,只會返回乙個淺複製了原陣列中的元素的乙個新陣列。原陣列的元素會按照下述規則拷貝 如果該元素是個物件引用 不是實際的物件 slice 會拷貝這個物件引用到新的陣列裡。兩個物...

C 深淺拷貝問題詳解

相信很多人都自己去實現過string類的構造,拷貝構造,析構函式以及對字串的各種操作運算子的過載。但是在自己實現這些函式的時候,有的人可能會踩到這個深淺拷貝的雷,所以我在這篇部落格寫出我自己對這塊的理解 不要去執行,因為程式會奔潰,用除錯來監視s1和s2變數 class string string ...

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

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