【发布时间】:2021-07-20 13:12:05
【问题描述】:
我正在探索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)
谁能解释为什么我会得到相同变量和表达式的两个不同结果?
【问题讨论】:
-
这是完全不同的情况;在 shell 中,您键入的每一行都是单独编译的,但是一个脚本是一次编译的 - 允许编译器注意到您已经使用了两次相同的常量。请注意,语言实际上并不能保证这两种行为,如果您依赖它,那么您的代码就会被破坏。
-
@jasonharper python 不是编译语言,所以我不太明白你的答案......你能进一步解释一下你的意思吗?这很奇怪,因为对整数(例如:10)进行的相同实验在 shell 和文件脚本中都给出了 True
-
@MatteoZanoni 查看我的回答,了解为什么会发生这种情况。 Python 将 [-5,256] 之间的整数缓存为单例,因此对于
a is b语句,该范围内的任何整数都将返回 true。另见What's with the integer cache maintained by the interpreter? -
'is' 有两个预期用途。 1. 在“==”不够具体的不常见情况下进行比较。其中最常见的是
x is None和x is not None。 2. 测试特定于实现的内部细节。 Python 测试套件有一些,它们被标记为 CPython-only 测试。有一个用于 CPython 特定的整数缓存。
标签: python python-idle