Python “为什么?”;是";运算符的行为与预期不同,在'id(i)是id(j)'中?

Python “为什么?”;是";运算符的行为与预期不同,在'id(i)是id(j)'中?,python,Python,我知道操作符是而不是测试对象标识:当且仅当x和y是同一对象时,x是y是真的 我用相同的值初始化两个变量I和j,当我将两个变量的id与is运算符进行比较时,它会给我一个False 即使id(i)和id(j)是相同的 我需要澄清,这是我的代码 >>> i = 10; >>> j = 10; >>> print(10==10); True >>> print(id(10)==id(10)); True >>> p

我知道操作符
不是
测试对象标识:当且仅当x和y是同一对象时,x是y是真的

我用相同的值初始化两个变量
I
j
,当我将两个变量的
id
is
运算符进行比较时,它会给我一个
False
即使
id(i)
id(j)
是相同的

我需要澄清,这是我的代码

>>> i = 10;
>>> j = 10;
>>> print(10==10);
True
>>> print(id(10)==id(10));
True
>>> print(10 is 10);
True
>>> print(5+5 is 10);
True
>>> print(i == j);
True
>>> print(id(i) == id(j));
True
>>> print(i is j);
True
>>> print(id(i) is id(j)); # Why this statment Evaluate to False this is my quetion?
False
>>> id(i);
140718000878704
>>> id(j);
140718000878704

当且仅当
id()
s相等时,如果它们是内存中的同一对象,则
is
检查为真。(内置的
id()
获取对象的唯一整数标识符,该标识符基于其在CPython中的内存地址)

在整数上使用
is
检查来比较它们的值是不合适的。CPython确实在小范围内重复使用整数对象,而不是作为优化创建新的整数对象,但这是一个不应该依赖的实现细节

对于超出该范围的整数对象,它们可能是内存中的独立对象,即使它们的值相等

比如说,

>>> x = -6
>>> -6 is x
False
>>> x = 257
>>> 257 is x
False

这里回答了可能的重复:(小整数被缓存,因此相同的对象,大整数不是相同的对象),因为您混淆了如何使用
is
-运算符。要么你测试
x是y
,要么你测试
id(x)==id(y)
,但不要把两者都放在一个表达式中:
id(x)是id(y)
毫无意义:这意味着测试
id(id(x))==id(id(y))
@4nkit(patel这是因为
-5
在我提到的CPython重用对象的小范围内。这就是为什么我使用了
-6
:)如果我这样做
>>x=-5>>-5是x真的
这是真的,因为你告诉CPython在小范围内重复使用整数对象??