Python 熊猫记忆释放

Python 熊猫记忆释放,python,pandas,memory,Python,Pandas,Memory,我试图理解python中的del操作符。我正在合并两个大数据帧并尝试删除参与的数据帧 new_df = pd.merge(df1, df2, on='level', how='inner') del df1 del df2 这将释放df1和df2分配的内存,还是仅仅删除引用 我也尝试过使用gc.collect但是,在合并后的第一次操作中,我遇到了内存错误否,del与内存管理或垃圾收集无关。它只递减一个称为引用计数器的值——每个对象都有一个引用计数器 一旦一个对象的引用计数器降到0,这意味着它不

我试图理解python中的
del
操作符。我正在合并两个大数据帧并尝试删除参与的数据帧

new_df = pd.merge(df1, df2, on='level', how='inner')
del df1
del df2
这将释放df1和df2分配的内存,还是仅仅删除引用


我也尝试过使用
gc.collect
但是,在合并后的第一次操作中,我遇到了内存错误

否,
del
与内存管理或垃圾收集无关。它只递减一个称为引用计数器的值——每个对象都有一个引用计数器

一旦一个对象的引用计数器降到0,这意味着它不再可以通过任何变量访问,并且将在收集器下次执行其操作时被垃圾收集

因此,总之,只要当前没有其他变量引用该对象,对对象调用
del
最终将在其内存中被回收


另请参见

谢谢。那么释放df1和df2分配的内存的最佳方法是什么?@niyas
del
将减少引用计数器。如果计数下降到0(即,没有其他变量指向相同的对象),那么最终将回收内存。要强制垃圾收集,请使用导入gc;gc.collect()@COLDSPEED我尝试使用gc,但似乎不起作用。我在合并后的第一次操作中遇到内存错误。@niyas啊,我知道你的问题是什么了。不幸的是,你找错了方向。在合并过程中,当您需要在内存中同时使用两个数据帧来创建第三个数据帧时,会发生内存错误。尝试使用
dask
或spark查看分布式数据帧,这些数据帧在处理大数据方面更好。