使用“is”在IDLE和pythonshell中的不同结果

我正在探索 python is vs ==,当我探索它时,我发现我是否写了以下内容;

>>> a = 10.24
>>> b = 10.24

在 python shell 中输入>> a is b,它给我输出为假。但是当我在 python 编辑器中编写以下代码并运行它时,我得到了正确的结果。

a = 10.24
b = 10.24
print(a is b)

谁能解释为什么我得到相同变量和表达式的两个不同结果?

回答

你不应该依赖是对价值的比较,当你想测试平等。

is关键字比较ID的变量,并检查它们是同一个对象。这仅适用于 Python 中的整数范围 [-5,256],因为它们是单例(这些值被缓存和引用,而不是将值存储在内存中)。请参阅解释器维护的整数缓存是什么?这与检查它们是否相同的值不同。

至于为什么它在 REPL 环境中的行为与传递的脚本不同,请参阅python 脚本和 python 空闲中的不同行为?. 它的要点是传递的脚本首先解析整个文件,而像 ipython 或 IDLE shell 这样的 REPL 环境一次读取一行。a=10.24并且b=10.24在不同的上下文中执行,因此外壳程序不知道它们应该是相同的值。

  • 很有帮助的解释。这是典型的奇怪行为,它将让您更多地了解 python 的内部工作原理。我今天肯定学到了一些东西

以上是使用“is”在IDLE和pythonshell中的不同结果的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>