字典淺拷貝例項例項1
2345
67>>>a
=
>>> b
=
a.copy()
>>> a, b
(, )
>>> a[
1
4
)
>>> a, b
(, )
深度拷貝需要引入 copy 模組:例項1
2345
67>>>
import
copy
>>> c
=
copy.deepcopy(a)
>>> a, c
(, )
>>> a[
1
5
)
>>> 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 -*-
import
copy
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指標被分配一次記憶體,但是程式結束時該記憶體卻被釋放了兩次,會造成記憶...