我注意到一旦生成器耗盡,對象仍保留在內存中。 如何讓生成器對象在耗盡後自動從內存中移出?在StopIteration(Python)中自動從內存中刪除生成器對象
1
A
回答
1
你可以嘗試製作一個包裝器生成器,確保它一旦完成就沒有對內部生成器的引用。以下甚至可能做到這一點(沒有經過充分測試):
def strange(gen):
for thing in gen:
yield thing
一旦gen
提高StopIteration
的strange
發生器將退出for循環,然後返回None
,這將再次提高StopIteration
。如果gen
是生成器的最後一個引用,它應該/可能可用於垃圾收集,然後無論代碼是否在迭代strange(gen)
獲得控制權。在CPython上,這意味着它被釋放。
請注意,如果你這樣做了以下不會幫助:
g = some_generator()
for x in strange(g):
do_something()
因爲g
本身是內部產生的參考。你不得不使用它更像是這樣的:
for x in strange(some_generator()):
do_something()
但實際上,最簡單的方法,就是去做你與任何其他物體,當你不希望它掛在內存中做什麼:確保你不會堅持引用它。如果引用它的變量處於長壽命範圍內,則可以明確地del
它。
1
這不是Python支持的操作。
相關問題
- 1. Python中的生成器的StopIteration錯誤
- 2. 函數完成時,對象是否從內存中刪除了對象? Python的
- 3. 從鈦內存中刪除VAR對象
- 4. 從javascript中刪除內存對象
- 5. C++從內存中刪除對象
- 6. Nuke中的Python:除了StopIteration
- 7. 自動生成的核心數據訪問器會自動刪除對象嗎?
- 8. 如何刪除在Python中引用對象的內存位置?
- 9. python嵌套生成器對象內容
- 10. 命名自動生成的對象,python
- 11. 如何從地圖中刪除對象/實例後從內存中刪除?
- 12. 如何從對象數組中刪除(釋放內存)對象(動態內存對象分配)
- 13. 在界面生成器中刪除自動佈局(約束)
- 14. python中的內存地址生成器
- 15. Python:從對象中刪除特定行
- 16. 從數組中刪除動態對象從DOM中刪除
- 17. 對象是存儲和從堆內存中刪除
- 18. 嘗試刪除C++中的對象時發生內存泄露
- 19. 使用Python刪除內存中的對象
- 20. C#從XSD自動生成類對象
- 21. 自動生成從C#對象
- 22. 從WSDL到Java對象 - 自動生成?
- 23. 從python中的對象列表中刪除對象
- 24. XmlSpy:內存泄漏在自動生成的xml解析器中
- 25. 自動生成值對象
- 26. 如何從AS3中的對象中自動刪除Event Listener
- 27. 從自動生成的文本輸出中刪除第一行
- 28. 從內存中刪除ViewController
- 29. away3d從內存中刪除
- 30. 內存中的對象python
如果你只有一個引用它,只是'del generator'。 – agf
@agf:請將您的答案發布爲答案,以便我們可以正確地對其進行修改。 –
「我注意到一旦發電機耗盡,物體仍留在內存中」。你是怎麼看到這個的?請提供代碼。這可能是因爲您創建了另一個對象引用來創建自己的問題。 –