在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)。
答案 0 :(得分:1)
这是解释器依赖(即没有需要这种缓存的规范)。但据我所知,python
解释器有一个整数缓存,包括 256 。此外,高达 -5 的值也会被缓存。所以范围是-5到256 (都包括在内),就像写在documentation中一样:
当前实现为 -5到256 (..)
之间的所有整数保留一个整数对象数组
你因此更好从不使用引用相等性来检查两个整数是否相等,总是使用==
。例如,如果您将int
与numpy int16
进行比较,这也很有用。如果使用引用检查,则以下内容将失败:
>>> np.int16(12) is 12
False
>>> np.int16(12) == 12
True