整数“is”运算符的意外行为
Python 中的“is”运算符比较对象标识,测试两个变量是否引用内存中完全相同的对象。但是,在比较整数时,它可能会出现意外行为。
请考虑 Python 2.5.2 中的以下示例:
>>> a = 256 >>> b = 256 >>> a is b True # Expected result >>> a = 257 >>> b = 257 >>> a is b False # Unexpected result
为什么“is”运算符在比较整数 257 时返回 False?
答案在于 Python 内部表示小整数的方式。根据 Python 文档,-5 到 256 之间的整数存储在预分配的数组中。当您创建此范围内的整数时,您实际上获得了对相应数组元素的引用。
这意味着对于 -5 到 256 之间的整数,“is”运算符本质上是比较内存地址而不是整数价值观。在上面的示例中,a 和 b 都引用数组中的相同元素,因此结果为 True。
但是,对于此范围之外的整数,“is”运算符的行为符合预期。它比较的是实际的整数值,而不是内存地址。
如果需要比较两个未知类型的对象,无论它们是否是整数,可以使用“id()”函数来获取他们的内存地址并比较它们:
>>> a = 257 >>> b = 257 >>> id(a) == id(b) False
以上是为什么 Python 的'is”运算符对于某些整数会出现异常行为?的详细内容。更多信息请关注PHP中文网其他相关文章!