2017-07-19 17 views
0

在Python 3:由于哪些值整数停止在Python中缓存和重用?

>> X = 42 
>> Y = 42 
>> X is Y 
True 

>> X = 2 ** 20 
>> Y = 2 ** 20 
>> X is Y 
False 

>> X = 2 ** 2 
>> Y = 2 ** 2 
>> X is Y 
True 

是什么,因为我开始越来越虚假的,而不是真正的整数的精确值,当我说出“X是Y”? (假设我正在运行标准的Python 3)。

+0

这听起来像一个程序应解决的问题类型... –

回答

1

这是解释器从属(即没有要求这种高速缓存的规范)。但据我所知python解释器有一个缓存整数,直到并包括。此外,高达并包括-5的值也被高速缓存。所以范围为-5至256(包括两端),例如写在documentation

当前实现保持整数对象上的所有整数-5和256之间阵列(..)

你从而更好地从来没有使用引用相等检查两个整数是否相等,始终使用==。例如,如果您将int与进行比较,这也很有用。如果您使用参考检查,以下将失败:

>>> np.int16(12) is 12 
False 
>>> np.int16(12) == 12 
True