1. 程式人生 > >[PYTHON] 深度解析copy.copy() 與 copy.deepcopy()

[PYTHON] 深度解析copy.copy() 與 copy.deepcopy()

可見 deep 可視化 相同 nbsp 原理 .cn 指導 錯誤

在列表中,想要復制一個列表,可以使用copy()函數,在列表中,copy()函數與切片 [:] 功能相同

a=[0,1,[0,1]]

b=a.copy()

c=a[:]

-----print b,c-----

b=[0,1,[0,1]]

c=[0,1,[0,1]]

在copy module中,copy.copy()也具有相同的功能,但是copy module中還有一個與copy.copy()長的很像,但功能不同的函數,那就是copy.deepcopy()

這也就是今天的主角‘淺復制copy.copy()’ 與 ‘深復制copy.deepcopy()’

首先由一張圖 來比較copy module 與 列表中copy()函數有什麽區別

技術分享

由此圖可見列表中copy() 不僅與 [:] 還與copy.copy()功能相同

可是copy module中的兩個函數 缺不相同 這是為什麽呢?

首先看‘淺復制copy.copy()’的原理

技術分享

由PYTHON可視化過程可知,在‘淺復制’中,b並沒有把列表中的小列表存儲到一個新的地址中,而是與a公用一個地址,所以當a小列表中值無論怎麽改變,b與其相同。

再來看, ‘深復制copy.deepcopy()’的原理

技術分享

由此圖可知,‘深復制‘的時候,b把列表中的小列表存儲橙一個新的地址,這事無論a的小列表的值怎麽變,卻不影響b的小列表。

感謝閱覽

還是一名學生,在文中很有可能出現錯誤的觀點或術語,請各位前輩批評與指導,謝謝!

[PYTHON] 深度解析copy.copy() 與 copy.deepcopy()