Python中实例打印的地址值与id(instance)返回值的区别是什么?
两个值的区别与本质
这两个数值本质对应同一个CPython环境下的对象真实内存地址,仅存在进制表示的差异:
0x100651460是十六进制格式的地址表示,是直接打印自定义类实例时,默认__repr__方法输出的地址格式4301591648是同一地址的十进制格式表示,是id()函数的返回值格式
你可以直接通过代码验证二者的等价性:
# 把id返回的十进制值转十六进制,和打印对象得到的地址完全一致 print(hex(id(t))) # 输出为 0x100651460
补充说明
在CPython(最常用的Python官方实现)中,id()函数的返回值就是对象在内存中的真实地址的十进制整数形式,而打印对象时展示的十六进制地址,只是把id()的返回值做了进制转换后输出的结果,二者没有本质区别,都是真实的对象地址。
如果是其他Python实现(比如PyPy、Jython),id()的返回规则不一定和内存地址绑定,这一结论不适用。
内容的提问来源于stack exchange,提问作者amayoon
相关产品推荐
相关产品推荐

