首页 > 后端开发 > Python教程 > 为什么 Python 的'is”运算符对于某些整数会出现异常行为?

为什么 Python 的'is”运算符对于某些整数会出现异常行为?

Barbara Streisand
发布: 2024-12-27 16:37:11
原创
981 人浏览过

Why Does Python's

整数“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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板