python中copy()和deepcopy()


 

深復制即是我們平時說的復制,即將被復制對象完全再復制一遍作為獨立的新個體單獨存在。所以改變原有被復制對象不會對已經復制出來的新對象產生影響。
淺復制並不會產生一個獨立的對象單獨存在,他只是將原有的數據塊打上一個新標簽,所以當其中一個標簽被改變的時候,數據塊就會發生變化,另一個標簽也會隨之改變。這就和我們尋常意義上的復制有所不同了

import copy
origin = [1, 2, [3, 4]]
#origin 里邊有三個元素:1, 2,[3, 4]
cop1 = copy.copy(origin)
cop2 = copy.deepcopy(origin)
cop1 == cop2 #True
cop1 is cop2 #False 
#cop1 和 cop2 看上去相同,但已不再是同一個object
origin[2][0] = "hey!" 
origin #[1, 2, ['hey!', 4]]
cop1 #[1, 2, ['hey!', 4]]
cop2 #[1, 2, [3, 4]]
#把origin內的子list [3, 4] 改掉了一個元素,觀察 cop1 和 cop2

 

不過我們也不經常使用,一般使用的pandas 的copy,那么在pandas的copy函數是深復制還是淺復制?答案如下:

df1 = df.copy(deep=True)  # 深拷貝
df1 = df.copy()           # 深拷貝,默認deep=True
df1 = df.copy(deep=False) # 淺拷貝,僅復制對數據和索引的引用。對淺層副本任何修改都影響原始數據,反之亦然。

 


免責聲明!

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



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