想了解Python中整数变量身份测试结果的解释吗

想了解Python中整数变量身份测试结果的解释吗,python,boolean,logic,operators,identity,Python,Boolean,Logic,Operators,Identity,我有一个简单的代码,是在HyperSkill上偶然发现的,当时我正在Python控制台(Python2和Python3)上测试它。结果把我弄糊涂了 >>> a = 5 >>> b = 5 >>> a == b True >>> a is b True >>> x = 1000 >>> y = 1000 >>> x == y True >>> x is y

我有一个简单的代码,是在HyperSkill上偶然发现的,当时我正在Python控制台(Python2和Python3)上测试它。结果把我弄糊涂了

>>> a = 5
>>> b = 5
>>> a == b
True
>>> a is b
True
>>> x = 1000
>>> y = 1000
>>> x == y
True
>>> x is y
False
>>>

我不明白为什么
a的结果是b
的结果是
True
,而
x的结果是y
的结果是(正如预期的那样)
False

的操作符比较两个对象是否被分配到内存中的相同底层对象。
=
操作符比较两个对象是否具有等效值

为了提高效率,Python将小整数值(-5到256)存储在内存中。将一个变量赋值为这些值整数中的一个总是将其赋值给Python内存中的相同的底层对象。对于较大的值,将创建一个新对象

下面是一些代码来显示它:

for x, y in zip(range(-7,260), range(-7,260)):
    print(x, x is y)

# prints:
-7 False
-6 False
-5 True
-4 True
-3 True
-2 True
-1 True
0 True
1 True
2 True
... 
254 True
255 True
256 True
257 False
258 False
259 False

“(0到255或-128到127,我忘了哪个)”
两者都没有-5到256(在当前的CPython实现中)谢谢!我在文档中找不到它。它是CPython的一个实现细节。请参阅@DeepSpace另一个值得研究的答案:或此@深空,谢谢!