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) # 浅拷贝,仅复制对数据和索引的引用。对浅层副本任何修改都影响原始数据,反之亦然。

 

posted on 2021-02-19 20:33  小小喽啰  阅读(1413)  评论(0编辑  收藏  举报