double equals vs在python中

ben*_*ben 74 python comparison boolean equality equals

我在Python解释器中运行以下代码:

>>> foo = 10
>>> dir(foo) == dir(10)
True
>>> dir(foo) is dir(10)
False
>>> 
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

Sil*_*Ray 137

is检查2个参数是否引用同一个对象,==检查2个参数是否具有相同的值. dir()返回一个list包含两个相同的数据foo10,而实际list的事情2实例是不同的.

  • 一个很好的例子是1 == True返回True,但1是True返回False. (47认同)
  • 一个更直接相关的观点是`dir(10)是dir(10)`甚至不是'True`(除非某种解释器优化),而`dir(1)== dir(10)`将是'真'. (7认同)
  • 您可以说python中的"is"与其他语言(如PHP)中的"==="相同. (3认同)
  • @frank是的,整数是对象.尝试`type(1)`或`a = 1; a .__ class__`等.你必须深入了解解析器的内部深处才能完全理解整数有什么身份(有一些实习,以及其他单身 - 如果内存服务,驱动优化继续进行),但足以说2个由整数文字组成的表达式有时可以是同一个对象,有时不是.例如,至少在我的Python 3.6中,`1是1`和`a = 1; b = 1; a是b`都是'True`但是`1是10/10'是'False`. (2认同)