Python 不同的'行为;是';比较具有相同int值的变量时的运算符
当我在交互式shell中使用“is”操作符时,遇到以下代码的奇怪行为: 一开始就如预期的那样: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个点,而其他的则不是
>>> x = 11
>>> y = 11
>>> x is y
True
但当我尝试这一次时:
>>> x = 987456
>>> y = 987456
>>> x is y
False
在进一步尝试使用id()函数之后,我注意到同一个对象上的整数>256个点,而其他的则不是。我还注意到,这种行为只发生在python交互式shell中。这是怎么回事?
是检查内存地址。作为C
type包装的不可变对象往往具有相同的内存地址,而其他对象则没有。这里的区别是存储整数所需的字节。这不是完整的答案,因为您还需要解释为什么小整数的内存地址可能相同,而大整数的内存地址可能不同。但是,这是一个重复项,用户可以查找以前的答案。=
在问题中找不到任何痕迹。的行为是一个优化问题,与C
类型的包装无关。@PeterWood,正如我提到的,我只是在玩它,然后我遇到了那个奇怪的行为