Python中DataFrame赋值是否指向同一内存对象?
Python中DataFrame的引用机制解析
你猜的没错,Python里的变量赋值(比如df = myObject.df)并不是创建副本,而是让新变量df和myObject.df指向同一个内存中的DataFrame对象,和C语言里的指针概念类似,Python里称这种机制为“引用传递”。
原因解析:
- Pandas的DataFrame属于可变对象,对可变对象进行赋值操作时,传递的是对象的引用,而非整个对象的内容拷贝。
- 当你执行
df["error_value"] = ""时,本质是直接修改这个被共享的DataFrame对象本身,所以myObject.df作为同一对象的引用,自然会同步看到这个新增列的变化。
解决方法:创建独立副本
如果想让df成为原DataFrame的独立副本,避免修改原对象,需要使用DataFrame的copy()方法:
df = myObject.df.copy() df["error_value"] = "" # 此时仅修改df,myObject.df不会受影响
- 默认的
copy()是浅拷贝,若DataFrame包含嵌套的可变对象(如列表),需使用copy(deep=True)进行深拷贝,确保所有嵌套层级的对象都被独立复制。
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

