Python: != 和 "is not" 的区别

17 投票
5 回答
12442 浏览
提问于 2025-04-16 16:23

我不太明白 !=is not 这两种写法有什么区别。它们看起来好像是做同样的事情:

>>> s = 'a'
>>> s != 'a'
False
>>> s is not 'a'
False

但是,当我在列表推导式中使用 is not 时,得到的结果和使用 != 时不一样。

>>> s = "hello"
>>> [c for c in s if c is not 'o']
['h', 'e', 'l', 'l', 'o']
>>> [c for c in s if c != 'o']
['h', 'e', 'l', 'l']

为什么 o 会出现在第一个列表里,但在第二个列表里却没有呢?

5 个回答

1

根据你困惑的情况,这可能会对你有帮助。

这两句话是一样的:

[c for c in s if c != 'o']
[c for c in s if not c == 'o']
10

is not 是用来比较两个东西的引用,也就是说它检查的是这两个东西是否是同一个对象。而 == 是用来比较两个东西的值,看看它们的内容是否相同。

40

is 用来检查两个对象是否是同一个对象,也就是说它们的身份是否相同;而 == 则用来检查两个对象的值是否相等,也就是它们的内容是否相同。

In [1]: a = 3424
In [2]: b = 3424

In [3]: a is b
Out[3]: False

In [4]: a == b
Out[4]: True

撰写回答