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

Python的id()函数是否存在对应的反向获取原对象的函数?

Python id() 反向函数实现问题解答

核心结论

Python标准库没有内置和id()完全对应的反向查询函数,但在CPython解释器环境下,可以借助垃圾回收模块gc实现符合要求的功能,不过该方案存在严格的适用限制。

实现代码(仅CPython可用)

通过遍历gc模块跟踪的所有存活对象,匹配id值即可实现目标函数:

import gc

def X(obj_id):
    for obj in gc.get_objects():
        if id(obj) == obj_id:
            return obj
    raise ValueError(f"未找到id为{obj_id}的存活对象")

你给出的测试用例可以正常运行通过:

class ABC(object): pass
a = ABC()
b = X(id(a))
assert b is a

使用限制

  • 仅兼容CPython解释器:id()返回对象内存地址是CPython的实现细节,PyPy等其他解释器的id()规则不适用该方案
  • 仅能查询存活对象:如果目标对象已经被垃圾回收销毁,会抛出匹配失败的异常
  • 性能开销大:需要遍历当前进程所有被gc跟踪的对象,程序对象数量较多时执行速度很慢
  • 覆盖范围有限:部分内置类型实例(比如小整数、驻留字符串)没有被gc跟踪,无法通过该方法查询

内容的提问来源于stack exchange,提问作者JimB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 07:30:05