python深拷貝與淺拷貝以及賦值變化

1、賦值變化

a = [1,2,3]
b = a
print(b)
a[0] = 5
print(b)

#輸出
[1, 2, 3]
[5, 2, 3]

[1, 2, 3]存放在內存中,一開始貼上標籤a,後來貼上標籤b,當list[1, 2, 3]中index0位置換爲5時,a,b同時發生變化。

2、深拷貝及淺拷貝

import copy
a = [1,2,3]
b = copy.copy(a)
c = copy.deepcopy(a)
a[0] = 5
print(b)
print(c)

#輸出
[1, 2, 3]
[1, 2, 3]

看到此處可能覺得深拷貝和淺拷貝,沒什麼不同。

import copy
a = [1,2,[3,4]]
b = copy.copy(a)
c = copy.deepcopy(a)
a[2][0] = 5
print(b)
print(c)

#輸出
[1, 2, [5, 4]]
[1, 2, [3, 4]]

與前面輸出結果對比會發現,copy對於一個複雜對象的子對象並不會完全複製,即:上面list裏嵌套的list,但是list中的單個對象會複製。而deepcopy的時候會將複雜對象的每一層複製一個單獨的個體出來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章