首页 > 解决方案 > 在python中访问内存堆

问题描述

有没有办法在 Python 中访问内存堆?我对能够访问在运行实例的内存中分配的所有对象感兴趣。

标签: pythonmemory

解决方案


您无法直接访问,但gc模块应该可以完成您想要的大部分操作。一个简单的gc.get_objects()调用将返回收集器跟踪的所有对象。这不是全部,因为 CPython 垃圾收集器只关心潜在的引用循环(因此不能引用其他对象的内置类型,例如int, float,str等)不会出现在结果list中,但是它们'都将被其中的某些东西引用list(如果不是,它们的引用计数将为零并且它们将被处理掉)。

除此之外,您可能会从模块中获得一些更有针对性的用途inspect尤其是堆栈框架检查,使用模块进行“轻松格式化”或手动挖掘半文档框架对象本身,其中任何一个都可以让您缩小范围范围缩小到堆栈帧上的特定活动范围。traceback

对于最接近堆的解决方案,您可以使用模块tracemalloc跟踪和记录分配发生时,或者使用pdb调试器从外部进行实时自省(可能添加对代码的breakpoint()调用以使其在到达该点时自动停止让你环顾四周)。


推荐阅读