python中类似R的对象删除和内存释放?

时间:2019-01-31 22:48:36

标签: python r memory

我来自R,我似乎无法弄清楚python中的这个超基本问题。

说我在R中放入一个随机森林。它位于一个名为rf的对象中。它占用内存。如果执行rm(rf),则在查看htop或在外壳程序中键入free时会释放内存。

如果我使用python并适合RandomForestRegressor并将其命名为rf,则进行del rf什么都不会发生

我可以先import gc然后gc.collect(),然后什么都没有发生

对于这样的事情,Python很酷,太简单了。如何找回记忆?

1 个答案:

答案 0 :(得分:1)

这意味着您在某处有另一个引用。

如果需要调试,可以使用print(sorted(globals()))print(sorted(locals()))列出当前引用。如果您熟悉gc,则可以使用gc.get_objects()查看每个引用的对象。使用del删除不需要的引用。当您没有引用对象时,Cpython将自动进行垃圾收集。

至少这是理论……因为,您使用的模块也可以保留引用,并且由于您保留对模块的引用,因此不会对其进行垃圾回收。您可以完全删除模块保存的引用(通过使用introspection)或del module。也许您的对象具有close函数或必须执行以释放资源的其他函数(也许是auto-closable)。

不用说,保持引用是模块应避免的事情。