首页 > 解决方案 > Python - 在内存中查找当前对象

问题描述

有没有办法找到当前在内存中的对象,包括它们的名称、它们的位置和模块名称等?

我的进程 Python.exe 在任务管理器中的 main() 方法之前的内存占用为 15MB。

在 main 方法完成第一次迭代后,进程 Python.exe 内存大小为 250MB。

我想了解哪些对象仍在内存中,以便我可以删除它们

while True:
 # print current object details
 main() 
 # print current object details

标签: pythonpython-3.xmemory

解决方案


不,没有办法在 Python 中找到所有对象。此外,大多数对象没有名称,并且对象“位置”不像您认为的那样工作。

与您要查找的内容最接近的是gc.get_objects,它返回所有 GC 跟踪对象的列表。这不是所有对象的列表,也没有告诉您为什么对象仍然存在。您可以使用 获取对象的 GC 跟踪的引用gc.get_referrers,但并非所有引用都为 GC 所知。

即使您确保不再需要的对象无法访问,并且即使它们的内存被回收,这仍然不意味着 Python 会真正将内存返回给操作系统。在这一切结束时,您的内存使用量可能仍为 250 MB。


推荐阅读