python 淺談深複製,淺複製
阿新 • • 發佈:2019-01-29
深複製,淺複製解析
深複製,淺複製
會出現可變序列型別中出現
淺複製
:複製父物件,不會複製物件內部的子物件(引用的物件
),
深複製
:複製父物件和子物件
深複製需要先匯入copy模組,然後才能使用
import copy
copy.deepcopy(list)
列表在巢狀一個有名字的列表時,更像是在引用這個物件,例如:
a = [1,2,3]
b = [a,4,5,6]
在b輸出顯示時,系統把會a解析成列表顯示出來:
print(b)
>> [[1,2,3],4,5,6]
但系統記錄的始終是 b = [a,4 ,5,6] ,a只是一個引用的物件。
所以在複製時, a 也是作為一個可引用的物件複製給 b ,
可以理解為 a 只是一個快捷方式,再怎麼複製也只是複製一個快捷方式而已,
這就是所為的淺複製。
而深複製呢,就是把 a 的內容 完完全全 複製到一個新的列表裡面,
換成另外一個思路就是:
深複製時,系統把a這個快捷方式所指的檔案,複製給了另外一個物件。
總結:
淺複製:只複製被引用的物件(快捷方式)
深複製:複製被引用物件的內容(檔案)
示例:
import copy
a = [1,2,3,4,['a','b']] # 賦值操作
b = a # 賦值操作
c = a.copy() # 淺複製操作
d = copy.copy(a) # 淺複製操作
e = copy.deepcopy(a) # 深複製操作
a.append(5)
a[4].append('c')
print(a) [1, 2, 3, 4, ['a', 'b', 'c'], 5]
print(b) [1, 2, 3, 4, ['a', 'b', 'c'], 5]
print(c) [1, 2, 3, 4, ['a', 'b', 'c']]
print(d) [1, 2, 3, 4, ['a', 'b', 'c' ]]
print(e) [1, 2, 3, 4, ['a', 'b']]