首页 > 解决方案 > 十六进制和十进制中的相同数字返回不同的 id

问题描述

如果使用相同的值,我假设id()python 中的不可变数据类型应该是相同的

但是,如果我存储相同整数的十进制和十六进制版本,这将失败:

In [1]: a = 0x1234                                                                                                                                                                                         

In [2]: b = 4660                                                                                                                                                                                           

In [3]: a == b                                                                                                                                                                                             
Out[3]: True

In [4]: id(a) == id(b)                                                                                                                                                                                     
Out[4]: False

In [5]: id(a)                                                                                                                                                                                              
Out[5]: 140579138155600

In [6]: id(b)                                                                                                                                                                                              
Out[6]: 140579138154736

为什么?

标签: pythonpython-3.x

解决方案


这与转换无关,每次您分配一个大整数时,Python 解释器都会创建对象,因此它们具有不同的对象。解释器启动时会创建 -1 到 255 之间的数字,并且它们id在所有程序中都相同。


推荐阅读