You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:27:03