在很多面試題中都會問到淺拷貝跟深度拷貝的區別,前幾天一個朋友也問到了我淺拷貝跟深度拷貝到底有什么區別,這里就簡單舉栗子講一下兩者的區別。
淺拷貝(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 完全拷貝了父對象及其子對象,兩者是完全獨立的。