在 Python 中,is 运算符检查对象身份而不是等价性。但是,在某些情况下,此行为可能是意外的,如下所示:
<code class="python">def func(): a = 1000 b = 1000 return a is b a = 1000 b = 1000 print(a is b, func()) # (False, True)</code>
is 比较在函数内返回 True,但在函数外返回 False。尽管评估结果不同,整数 a 和 b 似乎具有相同的值。
要理解这种行为,Python 解释器对代码块的解释至关重要。根据Python参考手册,交互执行的每个命令都构成一个单独的代码块。以下内容被视为块:
在单个代码块中,Python 缓存某些对象,例如小整数(在 [-5, 256] 范围内)。当多个变量引用相同的整数文字时,它们都将引用相同的缓存整数对象。但是,如果在不同的代码块中声明文字,则会创建不同的整数对象。
为了说明这一点,请考虑每种情况的代码对象:
因此,a is b 在 func 块中计算为 True,其中所有整数都是缓存,并且在创建单独对象的块外为 False。
请注意以下注意事项:
理解 Python 中代码块的概念对于解释涉及身份比较的意外行为至关重要。虽然对于检查不可变对象的身份很有用,但建议使用相等运算符(==)来比较值,因为它不依赖于缓存。
以上是为什么 Python 的“is”运算符对于不同代码块中的大整数表现不同?的详细内容。更多信息请关注PHP中文网其他相关文章!