我來自 R,我似乎無法弄清楚 python 中的這個超級基本問題。假設我在 R 中擬合了一個隨機森林。它在一個名為rf. 它占用內存。如果我這樣做rm(rf),當我查看htop或輸入freeshell時,內存會被釋放。如果我在 python 中并適合 aRandomForestRegressor并調用它rf,然后執行del rf,沒有任何反應。我可以import gc再gc.collect()和什么也沒有發生顯然,python 太酷了,這樣的事情不容易。怎么找回我的記憶?
1 回答

茅侃侃
TA貢獻1842條經驗 獲得超22個贊
這意味著你在某處有另一個引用。
如果您需要調試它,您可以使用print(sorted(globals()))
和print(sorted(locals()))
列出您當前的引用。如果您熟悉gc
,則可以使用gc.get_objects()
來查看每個引用的對象。使用del
刪除你不需要的引用。當你沒有對一個對象的引用時Cpython
會自動進行垃圾回收。
這至少是理論......因為,您正在使用的模塊也可以保留引用,并且由于您保留對模塊的引用,因此不會被垃圾收集。您可以刪除模塊保存的引用(通過使用introspection)或del module
完全刪除。也許您的對象有一個close
函數或其他必須執行以釋放資源的函數(也許它是自動關閉的)。
不用說,引用保持是模塊應該避免的事情。
添加回答
舉報
0/150
提交
取消