这是因为
id数字常量的结果是实现定义的。
在您的情况下(Python
2.7.2,IIRC),问题在于编译器将一些有用的整数常量构造为单例(从-1到100左右)。理由是这些数字的使用频率很高,以至于每次需要它们时都没有必要动态分配它们,而是简单地对其进行重用。
但是,恒定的单例优化对于
float值不是有用的,除了0.0之外,它们太多了!因此,每次
float需要一个新值时,都会对其进行分配,并获得一个不同的ID。
要获得更深刻的见解,请阅读源代码!这个文件来自Python3,但是想法是一样的:寻找
small_ints数组。



