我来自 R,我似乎无法弄清楚 python 中的这个超级基本问题。假设我在 R 中拟合了一个随机森林。它在一个名为rf. 它占用内存。如果我这样做rm(rf),当我查看htop或输入freeshell时,内存会被释放。如果我在 python 中并适合 aRandomForestRegressor并调用它rf,然后执行del rf,没有任何反应。我可以import gc再gc.collect()和什么也没有发生显然,python 太酷了,这样的事情不容易。怎么找回我的记忆?
1 回答

茅侃侃
TA贡献1842条经验 获得超21个赞
这意味着你在某处有另一个引用。
如果您需要调试它,您可以使用print(sorted(globals()))
和print(sorted(locals()))
列出您当前的引用。如果您熟悉gc
,则可以使用gc.get_objects()
来查看每个引用的对象。使用del
删除你不需要的引用。当你没有对一个对象的引用时Cpython
会自动进行垃圾回收。
这至少是理论......因为,您正在使用的模块也可以保留引用,并且由于您保留对模块的引用,因此不会被垃圾收集。您可以删除模块保存的引用(通过使用introspection)或del module
完全删除。也许您的对象有一个close
函数或其他必须执行以释放资源的函数(也许它是自动关闭的)。
不用说,引用保持是模块应该避免的事情。
添加回答
举报
0/150
提交
取消