深復制即是我們平時說的復制,即將被復制對象完全再復制一遍作為獨立的新個體單獨存在。所以改變原有被復制對象不會對已經復制出來的新對象產生影響。
淺復制並不會產生一個獨立的對象單獨存在,他只是將原有的數據塊打上一個新標簽,所以當其中一個標簽被改變的時候,數據塊就會發生變化,另一個標簽也會隨之改變。這就和我們尋常意義上的復制有所不同了
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) # 淺拷貝,僅復制對數據和索引的引用。對淺層副本任何修改都影響原始數據,反之亦然。