我注意到一旦生成器耗尽,对象仍保留在内存中。 如何让生成器对象在耗尽后自动从内存中移出?在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. 自动生成的核心数据访问器会自动删除对象吗?
- 3. Nuke中的Python:除了StopIteration
- 4. 如何删除在Python中引用对象的内存位置?
- 5. 如何从地图中删除对象/实例后从内存中删除?
- 6. 如何从对象数组中删除(释放内存)对象(动态内存对象分配)
- 7. 在界面生成器中删除自动布局(约束)
- 8. Python:从对象中删除特定行
- 9. 在Maya中通过Python自动生成和放置对象
- 10. 尝试删除C++中的对象时发生内存泄露
- 11. 使用Python删除内存中的对象
- 12. 自动生成从C#对象
- 13. C#从XSD自动生成类对象
- 14. 从python中的对象列表中删除对象
- 15. 自动生成值对象
- 16. 从自动生成的文本输出中删除第一行
- 17. away3d从内存中删除
- 18. 从内存中删除ViewController
- 19. 从JSONArray中删除对象
- 20. 从IEnumerable中删除对象
- 21. 从UINavigationController中删除对象
- 22. 从NSMutableArray中删除对象
- 23. 从CoreData中删除对象
- 24. 从对象中删除值
- 25. 如何从内存中删除perl对象
- 26. 迭代通过2D矢量从内存中删除对象
- 27. Softlayer对象到期日期自动删除对象的存储
- 28. 删除对象在Python
- 29. 索引后自动从内存中删除索尔
- 30. Lua - 从内存中删除对象时,递减“class”对象计数
如果你只有一个引用它,只是'del generator'。 – agf
@agf:请将您的答案发布为答案,以便我们可以正确地对其进行修改。 –
“我注意到一旦发电机耗尽,物体仍留在内存中”。你是怎么看到这个的?请提供代码。这可能是因为您创建了另一个对象引用来创建自己的问题。 –