我们都知道,Pandas中对DataFrame对象的任何变量赋值都只是一个引用,而不是一个新实例。但是,如果我将变量't'分配给由字符串和pandas DataFrame组成的元组,如下所示:
df=pd.DataFrame([[1,2,3],[4,5,6]])
t=('example',df)
当我这样做时:
new=t[1]
是变量new是对原始对象'df'的引用(即可变和暴露),或者它现在被称为新实例(即在这种情况下df是不可变的)?
谢谢。
答案 0 :(得分:1)
变量new是否是对原始对象'df'的引用(即 可变的和暴露的)或现在它被称为一个新的实例?
你为什么不......
In [516]: id(df)
Out[516]: 4481803432
In [517]: id(t[1])
Out[517]: 4481803432
我认为它总是给出的元组(类似于行为字符串) 你是一个与列表不同的新对象......
错误。 tuple
和list
之间的唯一区别是前者是不可变的。两者都将成为相同参考文献的容器。
所以我想如果我们在一个元组中调用一个DataFrame就会创建一个新的 对象,无需执行.copy()
没有。如果需要副本,则需要显式调用.copy()
。否则你正在使用相同的参考。
我可以有把握地说,复制()是一个好习惯 避免突变?
不是,因为大多数数据帧变异方法都返回数据帧的副本。除非您明确请求更改(例如使用inplace=True
标志),否则永远不会进行更改。
您应该知道设置inplace=True
不会提高效果,因为内部创建了副本,然后将其分配回原始版本。