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

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