从哪个值整数停止在Python中缓存和重用?

时间:2017-07-19 19:15:28

标签: python-3.x caching integer internals

在Python 3中:

>> 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"时,我开始得到False而不是True的整数的精确值是多少? (假设我正在运行标准的Python 3)。

1 个答案:

答案 0 :(得分:1)

这是解释器依赖(即没有需要这种缓存的规范)。但据我所知,python解释器有一个整数缓存,包括 256 。此外,高达 -5 的值也会被缓存。所以范围是-5到256 (都包括在内),就像写在documentation中一样:

  

当前实现为 -5到256 (..)

之间的所有整数保留一个整数对象数组

你因此更好从不使用引用相等性来检查两个整数是否相等,总是使用== 。例如,如果您将int与numpy int16进行比较,这也很有用。如果使用引用检查,则以下内容将失败:

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