目录
Python 对大整数的“is”运算符行为
问题
解释
不同的代码对象,不同的标识
注意事项
结论
首页 后端开发 Python教程 为什么 Python 的'is”运算符对于不同代码块中的大整数表现不同?

为什么 Python 的'is”运算符对于不同代码块中的大整数表现不同?

Nov 01, 2024 pm 03:26 PM

Why Does Python's

Python 对大整数的“is”运算符行为

问题

在 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] 范围内)。当多个变量引用相同的整数文字时,它们都将引用相同的缓存整数对象。但是,如果在不同的代码块中声明文字,则会创建不同的整数对象。

不同的代码对象,不同的标识

为了说明这一点,请考虑每种情况的代码对象:

  • 函数 func: a 和 b 引用同一个整数对象(由 Python 缓存,因为 1000 在缓存的整数范围内)。
  • 交互式命令: a 和 b 引用不同的整数对象,因为它们是在单独的代码块中定义的。

因此,a is b 在 func 块中计算为 True,其中所有整数都是缓存,并且在创建单独对象的块外为 False。

注意事项

请注意以下注意事项:

  • 在单行中链接赋值语句可能会导致在 True 身份检查中。
  • 由于模块的单个代码块,模块级执行将返回 True。
  • 涉及可变对象的测试将始终返回 False,因为它们没有被缓存。

结论

理解 Python 中代码块的概念对于解释涉及身份比较的意外行为至关重要。虽然对于检查不可变对象的身份很有用,但建议使用相等运算符(==)来比较值,因为它不依赖于缓存。

以上是为什么 Python 的'is”运算符对于不同代码块中的大整数表现不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何使用Python查找文本文件的ZIPF分布 如何使用Python查找文本文件的ZIPF分布 Mar 05, 2025 am 09:58 AM

如何使用Python查找文本文件的ZIPF分布

如何在Python中下载文件 如何在Python中下载文件 Mar 01, 2025 am 10:03 AM

如何在Python中下载文件

python中的图像过滤 python中的图像过滤 Mar 03, 2025 am 09:44 AM

python中的图像过滤

我如何使用美丽的汤来解析HTML? 我如何使用美丽的汤来解析HTML? Mar 10, 2025 pm 06:54 PM

我如何使用美丽的汤来解析HTML?

如何使用Python使用PDF文档 如何使用Python使用PDF文档 Mar 02, 2025 am 09:54 AM

如何使用Python使用PDF文档

如何在django应用程序中使用redis缓存 如何在django应用程序中使用redis缓存 Mar 02, 2025 am 10:10 AM

如何在django应用程序中使用redis缓存

引入自然语言工具包(NLTK) 引入自然语言工具包(NLTK) Mar 01, 2025 am 10:05 AM

引入自然语言工具包(NLTK)

如何使用TensorFlow或Pytorch进行深度学习? 如何使用TensorFlow或Pytorch进行深度学习? Mar 10, 2025 pm 06:52 PM

如何使用TensorFlow或Pytorch进行深度学习?

See all articles