python中淺拷貝和深度拷貝的區別
阿新 • • 發佈:2019-01-06
在很多面試題中都會問到淺拷貝跟深度拷貝的區別,前幾天一個朋友也問到了我淺拷貝跟深度拷貝到底有什麼區別,這裡就簡單舉栗子講一下兩者的區別。
淺拷貝(copy()):拷貝父物件,不會拷貝物件的內部的子物件
深拷貝( copy.deepcopy()):完全拷貝父物件跟子物件
import copy l = [1, 2, ['a', 'b']] s_copy = l.copy() # 淺拷貝 d_copy = copy.deepcopy(l) # 深拷貝 l.append(3) l[2].append('c') print(l) # [1, 2, ['a', 'b', 'c'], 3]print(s_copy) # [1, 2, ['a', 'b', 'c']] print(d_copy) # [1, 2, ['a', 'b']]
通過上面的輸出結果可以很好的看到,深拷貝是直接複製了所有的父物件跟子物件,原來的不管怎麼變都跟他沒關係,淺拷貝只是複製了當前的父物件,如果子物件發生變化,淺拷貝也是會跟著改變的。
深入解析:
1、b = a.copy(): 淺拷貝, a 和 b 是一個獨立的物件,但他們的子物件還是指向統一物件(是引用)。
2、b = copy.deepcopy(a): 深度拷貝, a 和 b 完全拷貝了父物件及其子物件,兩者是完全獨立的。