【发布时间】:2018-08-14 15:33:28
【问题描述】:
我正在尝试理解 python 中的del 运算符。我正在合并两个大数据框并尝试删除参与的数据框。
new_df = pd.merge(df1, df2, on='level', how='inner')
del df1
del df2
这会释放 df1 和 df2 分配的内存还是只删除引用?
我也尝试过使用gc.collect,但是在合并后的第一次操作中出现内存错误
【问题讨论】:
我正在尝试理解 python 中的del 运算符。我正在合并两个大数据框并尝试删除参与的数据框。
new_df = pd.merge(df1, df2, on='level', how='inner')
del df1
del df2
这会释放 df1 和 df2 分配的内存还是只删除引用?
我也尝试过使用gc.collect,但是在合并后的第一次操作中出现内存错误
【问题讨论】:
不,del 没有任何与内存管理或垃圾收集有关。它只会减少一个称为引用计数器的东西——每个对象都有一个。
一旦对象的引用计数器降至 0,这意味着它不再可以通过任何变量访问,并且将在收集器下一次执行其操作时被垃圾回收。
因此,总而言之,只要当前没有其他变量引用该对象,对一个对象调用 del 最终会导致其内存被回收。
另见Is there a way to get the current ref count of an object in Python?
【讨论】:
del 将减少引用计数器。如果计数下降到 0(即没有其他变量指向相同的对象),那么内存最终将被回收。要强制垃圾回收,请使用import gc; gc.collect()。
dask 或 spark 查看分布式数据帧,它们在处理大数据方面要好得多。