使用“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 的内部工作原理。我今天肯定学到了一些东西