double equals vs is in python
我在python解释器中运行以下代码:
1 2 3 4 5 6
| >>> foo = 10
>>> dir(foo) == dir(10)
True
>>> dir(foo) is dir(10)
False
>>> |
为什么会这样?
2,指的是对is检查受检查的对象,这==2有相同的参数值。这listdir()返回包含两个相同的日期和目前的foo10list实例,但事情是不同的2。
- 一个很好的例子是1==true返回true,但1为true返回false。
- 更直接相关的一点是,dir(10) is dir(10)甚至不会是True(除非进行某种解释器优化),而dir(1) == dir(10)将是True。
- 您可以说,在python中"is"与php等其他语言中的"=="相同。
- 这可能属于一个单独的问题,但数字是Python中的对象吗?为什么1 is 1返回True?
- @是的,整数是对象。尝试type(1)或a = 1;a.__class__等。您必须深入了解解析器的内部结构,才能完全理解整数具有什么标识(如果内存可用,还需要进行一些Interning和其他单例驱动的优化),但足以说明由整数文本组成的两个表达式有时可能是相同的对象,并且有时不是。例如,至少在我的python 3.6中,1 is 1和a = 1;b = 1;a is b都是True,但1 is 10 / 10是False。