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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM