《Fluent Python》第八章里讲到深拷贝和浅拷贝,然后我想到了常用的pandas里的copy:
看上去deep是控制深拷贝或者浅拷贝,但是下面这段又解释说deep=True的时候,数据中的Python对象不是递归得拷贝,而是对对象的引用,这和标准库里的深拷贝不同。赋值索引对象这种不可变对象,出于性能原因,拷贝是不需要的,引用就足够安全:
我不理解!于是去查相关资料。
这个回答讲到说深拷贝在pandas里面不起作用,因为开发者认为在DataFrame中嵌入可变对象是一种反模式。好吧,如果DataFrame里不包含可变对象或者可变对象的复核对象,那深拷贝和浅拷贝就没有区别,所以为了性能就都是浅拷贝。
那么deep这个参数到底是干啥的呢?或者说deep=True or False有什么区别呢?
这个回答提出了一个例子,里面用到了update函数。
总结一下,pandas里的copy都是浅拷贝,如果你要拷贝出的对象和原对象毫无关系,不需要管deep参数,用 b = a.copy()
就完事了。