is" 操作符结果:发生了什么?
我感到很惊讶,当
[] is not []
计算结果是 True
。
这段代码到底发生了什么?not
和 is
这两个语句到底在干什么呢?
7 个回答
25
最简单的方式来解释为什么会这样是:
这里有一个例子
>>> x = []
>>> y = []
>>> print(x is y)
... False
x
和y
其实是两个不同的列表,所以如果你往x
里添加东西,y
里是看不到的。
>>> x.append(1)
>>> print(x)
... [1]
>>> print(y)
... []
那么我们怎么才能让(x is y
)这个判断结果为真呢?
>>> x = []
>>> y = x
>>> print(x is y)
... True
>>> x.append(10)
>>> print(x)
... [10]
>>> print(y)
... [10]
>>> print(x is y)
... True
如果你想检查两个列表的内容是否相同……
>>> x = []
>>> y = []
>>> print(x == y)
... True
>>> x.append(21)
>>> print(x)
... [21]
>>> print(y)
... []
>>> print(x == y)
... False
>>> y = [21]
>>> print(x == y)
... True
36
is
是用来比较两个东西是不是同一个东西。
==
是用来比较两个东西的内容是不是一样。
你的说法是创建了两个不同的列表,然后检查它们是不是同一个实例,但它们不是。如果你用 ==
来比较,它会返回真,因为它们都是空列表。
60
a is not b
是一个特殊的运算符,它的意思和 not a is b
是一样的。
运算符 a is b
会返回 True,只有当 a 和 b 指向同一个对象时,才会这样。如果你创建了两个空列表,它们实际上是两个不同的对象,所以 is
会返回 False(因此 is not
会返回 True)。