【发布时间】:2013-02-07 03:19:06
【问题描述】:
我在 Python 解释器中运行以下命令:
>>> foo = 10
>>> dir(foo) == dir(10)
True
>>> dir(foo) is dir(10)
False
>>>
这是为什么?
【问题讨论】:
标签: python comparison boolean equals equality
我在 Python 解释器中运行以下命令:
>>> foo = 10
>>> dir(foo) == dir(10)
True
>>> dir(foo) is dir(10)
False
>>>
这是为什么?
【问题讨论】:
标签: python comparison boolean equals equality
is 检查两个参数是否指向同一个对象,== 检查两个参数是否具有相同的值。 dir() 返回一个 list,其中包含 foo 和 10 的相同数据,但两者的实际 list 实例不同。
【讨论】:
dir(10) is dir(10) 甚至不会是True(除非进行某种解释器优化),而dir(1) == dir(10) 将是True。
1 is 1怎么会返回True?
type(1) 或a = 1;a.__class__ 等。您必须深入了解解析器的内部结构,才能完全了解哪些整数具有哪些身份(如果有记忆,还有一些实习和其他单例驱动的优化正在进行),但足以说由整数文字组成的 2 个表达式有时可以是同一个对象,有时不是。例如,至少在我的 Python 3.6 中,1 is 1 和 a = 1;b = 1;a is b 都是 True 但 1 is 10 / 10 是 False。