使用 '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.24
和 b=10.24
在不同的上下文中执行,因此 shell 不知道它们应该是相同的值。
在 python 编辑器中
a = 10.24
b = 10.24
print(id(a),id(b))
输出-
2079062604112 2079062604112
如果和C联系起来,那么2079062604112
,2079062604112
其实就是内存地址,这里Python是唯一的id,和[=29一样=] 编辑器。
在shell-
>>> a = 10.24
>>> b = 10.24
>>> id(a)
2254043146288 # output
>>> id(b)
2254043400016 # output
提供不同的唯一标识。
因此,当 is
用于比较时,它会比较 unique id's
,这就是您得到不同答案的原因。
希望对您有所帮助。
我在探索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 环境中的行为与传递的脚本不同,请参阅 a=10.24
和 b=10.24
在不同的上下文中执行,因此 shell 不知道它们应该是相同的值。
在 python 编辑器中
a = 10.24
b = 10.24
print(id(a),id(b))
输出-
2079062604112 2079062604112
如果和C联系起来,那么2079062604112
,2079062604112
其实就是内存地址,这里Python是唯一的id,和[=29一样=] 编辑器。
在shell-
>>> a = 10.24
>>> b = 10.24
>>> id(a)
2254043146288 # output
>>> id(b)
2254043400016 # output
提供不同的唯一标识。
因此,当 is
用于比较时,它会比较 unique id's
,这就是您得到不同答案的原因。
希望对您有所帮助。