Python 十六进制和十进制中相同的数字返回不同的id

Python 十六进制和十进制中相同的数字返回不同的id,python,python-3.x,Python,Python 3.x,如果使用相同的值,我假定python中不可变数据类型的id应该相同 但如果我存储同一整数的十进制和十六进制版本,则此操作失败: In [1]: a = 0x1234

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

但如果我存储同一整数的十进制和十六进制版本,则此操作失败:

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

为什么?

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