“is”运算符对整数的令人困惑的行为
在 Python 中,“is”运算符检查两个对象是否引用同一个对象记忆中。虽然这通常按预期工作,但它对整数表现出意外的行为,导致开发人员感到困惑。
大整数的意外结果
考虑以下代码:
a = 256 b = 256 a is b # True (expected) a = 257 b = 257 a is b # False (unexpected)
为什么“is”运算符在第二次比较中返回 False? 257 不等于 257 吗?
CPython 实现细节
奇怪的行为源于 CPython(最常见的 Python 解释器)中微妙的实现细节。对于 -5 到 256 之间的整数,CPython 维护一个整数对象数组。当您创建此范围内的整数时,您只需获取对数组中现有对象的引用即可。这意味着对于此范围内的小整数,“is”运算符会检查它们是否引用数组中的同一对象。
后果和含义
在上面的例子,当我们将 256 分配给 a 和 b 时,我们从数组中收到相同的对象。因此,“a is b”的计算结果为 True。然而,当我们将 257 分配给 a 和 b 时,我们创建了两个不相同的新对象,导致“a is b”返回 False。
替代比较方法
要比较两个任意对象的相等性,无论其类型如何,您可以使用“==”运算符而不是“is”。这将检查对象的值而不是它们的身份。
a = 257 b = 257 a == b # True
请记住,仅当您需要检查两个对象是否引用内存中完全相同的对象时才应使用“is”运算符,而'=='应该用于比较值。
以上是为什么 Python 的'is”运算符对于小整数和大整数的行为不同?的详细内容。更多信息请关注PHP中文网其他相关文章!