如何在Python中访问memory heap(内存堆)以获取运行实例全部已分配对象
Python访问内存堆、获取所有已分配对象的方法
是可以实现的,无需引入第三方依赖,直接用Python标准库的内置模块即可满足需求:
核心方法:使用gc模块获取全量已分配对象
gc(垃圾回收器)模块提供的gc.get_objects()接口,会直接返回当前Python运行实例中所有被GC跟踪的、已分配在堆内存中的对象列表,覆盖绝大多数业务场景的使用需求。
示例代码:
import gc # 获取所有已分配对象 all_allocated_objs = gc.get_objects() # 举例:统计当前所有字典类型对象的数量 dict_count = sum(1 for obj in all_allocated_objs if isinstance(obj, dict)) print(f"当前已分配的字典对象数量:{dict_count}")
注意事项
gc.get_objects()不会返回Python内部优化的、未被GC跟踪的对象,比如驻留的小整数、常量字符串等,这类对象本身不会被垃圾回收,若需要统计要单独处理。gc.get_objects()调用时生成的结果列表本身,也会被计入返回的对象列表中,统计时可按需过滤。- 如果需要更细粒度的堆内存分配数据(比如内存占用大小、分配位置),可以使用
tracemalloc模块,适合内存泄漏排查、内存占用分析场景,示例:
import tracemalloc # 启动内存分配跟踪 tracemalloc.start() # 你的业务代码执行 demo_list = [0] * 1024 * 1024 # 抓取当前内存分配快照 snapshot = tracemalloc.take_snapshot() top5_mem_usage = snapshot.statistics('lineno')[:5] print("Top 5 内存占用位置:") for stat in top5_mem_usage: print(stat)
扩展使用场景
如果你需要做内存泄漏定位,还可以搭配
gc.get_referrers()、gc.get_referents()接口,追踪对象的引用持有链路,快速定位无法被回收的对象的引用来源。
内容的提问来源于stack exchange,提问作者Petras Purlys
相关产品推荐
相关产品推荐

