使用 'is' 在 IDLE 和 python shell 中的不同结果

Different results in IDLE and python shell using 'is'

我在探索python vs ==,我在探索的时候发现如果我写正在关注;

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

在 python shell 中输入 >> a is b,它给我的输出为 false。但是当我在 python 编辑器中编写以下代码并且 运行 我得到了 true.

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

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

should not rely on is在你想测试相等性时比较值。

is关键字比较变量的id,并检查它们是否是同一个对象。这仅适用于 Python 中的整数范围 [-5,256],因为它们是单例(这些值被缓存和引用,而不是将值存储在内存中)。请参阅 What's with the integer cache maintained by the interpreter? 这与检查它们是否相同的值不同。

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

在 python 编辑器中

a = 10.24
b = 10.24
print(id(a),id(b))

输出-

2079062604112 2079062604112

如果和C联系起来,那么20790626041122079062604112其实就是内存地址,这里Python是唯一的id,和[=29一样=] 编辑器。

在shell-

>>> a = 10.24
>>> b = 10.24
>>> id(a)
2254043146288 # output
>>> id(b)
2254043400016 # output

提供不同的唯一标识。
因此,当 is 用于比较时,它会比较 unique id's,这就是您得到不同答案的原因。
希望对您有所帮助。