Python: != 和 "is not" 的区别
我不太明白 !=
和 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