从-5到256(含)之间的所有整数都被缓存为与CPython共享相同地址的全局对象,因此
is测试通过。
该工件在http://www.laurentluce.com/posts/python-integer-objects-
implementation/中进行了详细说明,我们可以在http://hg.python.org/cpython/file中检查当前源代码。/tip/Objects/longobject.c。
特定的结构用于引用小整数并共享它们,因此访问速度很快。它是262个指向整数对象的指针的数组。这些整数对象在初始化期间在我们上面看到的整数对象块中分配。小整数范围是-5到256。许多Python程序在该范围内使用整数花费很多时间,因此这是一个明智的决定。
这只是CPython的实现细节,您不应该依赖于此。
例如,PyPy实现了
idinteger来返回自身,所以
(0-6) is-6即使它们在内部是“不同的对象”
,也总是如此。它还允许您配置是否启用此整数缓存,甚至设置下限和上限。但是通常,从不同来源检索到的对象将是不同的。如果要比较相等性,请使用
==。



