但是对于 df = df.copy() ,新的 df 是否会覆盖旧的 df ?我的意思是在 df = df.copy() 的 RAM 中我有多少个数据帧?
这不是关于Pandas 或 DataFrame 类的问题。这是一个关于=Python中运算符的问题。
df.copy()创建一个新对象,它恰好是 DataFrame 类的新实例。这就是你所需要知道的。(你必须知道这一点,因为函数可以返回已经存在的对象。)无论你写还是,它都会以完全相同的方式执行此操作 - 这可能并不重要,因为该方法无法知道赋值甚至将会发生。dg = df.copy()df = df.copy()
赋值使名称引用某个特定对象。就是这样。dg = df.copy()意思是“当你从 获取对象时df.copy(),让dg成为该对象的名称”。df = df.copy()意思是“当你从 获取对象时df.copy(),让df(不再是它之前命名的名称,并且)成为该对象的名称”。
只要对象有名称,它们就会一直存在。
当你写的时候dg = df.copy(),这个df名字仍然是原来的名字DataFrame,所以现在你的DataFrames记忆中必然有两个。
当您写入 时df = df.copy(),该df名称不再是原始名称的名称DataFrame,因为它已更改为新名称的名称。所以现在旧的可能还在记忆中,也可能不在记忆中。
如果它有任何其他名称(或其他引用 - 例如,作为某处列表的元素),它肯定仍然在内存中。
在参考实现中,如果这是对象的最后一个剩余名称,它将被释放。发生这种情况是因为引用实现使用基于引用计数的垃圾收集。其他实现(例如 Jython)可能不会这样做;他们可以使用任何类型的垃圾收集技术。