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
相关产品推荐
相关产品推荐

