我在Python解释器中运行以下代码:
为什么会这样?
>>> foo = 10
>>> dir(foo) == dir(10)
True
>>> dir(foo) is dir(10)
False
>>>
为什么会这样?
>>> foo = 10
>>> dir(foo) == dir(10)
True
>>> dir(foo) is dir(10)
False
>>>
is
检查两个参数是否指向同一个对象,==
检查两个参数的值是否相等。 dir()
返回一个列表,其中包含foo
和10
的相同数据,但是这两个事物的实际list
实例是不同的。
dir(10) is dir(10)
不会为True
,而dir(1) == dir(10)
则会为True
。 - Silas Ray1 is 1
返回True
? - Nathan majicvr.comtype(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
。 - Silas Ray