is" 操作符结果:发生了什么?

39 投票
7 回答
40531 浏览
提问于 2025-04-16 04:10

我感到很惊讶,当

[] is not []

计算结果是 True

这段代码到底发生了什么?notis 这两个语句到底在干什么呢?

7 个回答

25

最简单的方式来解释为什么会这样是:

这里有一个例子

>>> x = []
>>> y = []
>>> print(x is y)
... False

xy其实是两个不同的列表,所以如果你往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)。

撰写回答