深复制即是我们平时说的复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在。所以改变原有被复制对象不会对已经复制出来的新对象产生影响。
浅复制并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。这就和我们寻常意义上的复制有所不同了
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) # 浅拷贝,仅复制对数据和索引的引用。对浅层副本任何修改都影响原始数据,反之亦然。
原文:https://www.cnblogs.com/cgmcoding/p/14417937.html