1. 程式人生 > >python中淺拷貝和深度拷貝的區別

python中淺拷貝和深度拷貝的區別

在很多面試題中都會問到淺拷貝跟深度拷貝的區別,前幾天一個朋友也問到了我淺拷貝跟深度拷貝到底有什麼區別,這裡就簡單舉栗子講一下兩者的區別。

淺拷貝(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 完全拷貝了父物件及其子物件,兩者是完全獨立的。