Python 不同的'行为;是';比较具有相同int值的变量时的运算符

Python 不同的'行为;是';比较具有相同int值的变量时的运算符,python,python-3.x,Python,Python 3.x,当我在交互式shell中使用“is”操作符时,遇到以下代码的奇怪行为: 一开始就如预期的那样: >>> x = 11 >>> y = 11 >>> x is y True 但当我尝试这一次时: >>> x = 987456 >>> y = 987456 >>> x is y False 在进一步尝试使用id()函数之后,我注意到同一个对象上的整数>256个点,而其他的则不是

当我在交互式shell中使用“is”操作符时,遇到以下代码的奇怪行为:

一开始就如预期的那样:

>>> x = 11

>>> y = 11

>>> x is y

True
但当我尝试这一次时:

>>> x = 987456

>>> y = 987456

>>> x is y

False

在进一步尝试使用id()函数之后,我注意到同一个对象上的整数>256个点,而其他的则不是。我还注意到,这种行为只发生在python交互式shell中。这是怎么回事?

是检查内存地址。作为
C
type包装的不可变对象往往具有相同的内存地址,而其他对象则没有。这里的区别是存储整数所需的字节。

这不是完整的答案,因为您还需要解释为什么小整数的内存地址可能相同,而大整数的内存地址可能不同。但是,这是一个重复项,用户可以查找以前的答案。
=
在问题中找不到任何痕迹。
的行为是一个优化问题,与
C
类型的包装无关。@PeterWood,正如我提到的,我只是在玩它,然后我遇到了那个奇怪的行为