Python:!=和"不是"之间的区别

Cha*_*l72 11 python syntax list-comprehension

我不清楚语法!=和语法之间的区别is not.他们似乎做了同样的事情:

>>> s = 'a'
>>> s != 'a'
False
>>> s is not 'a'
False
Run Code Online (Sandbox Code Playgroud)

但是,当我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']
Run Code Online (Sandbox Code Playgroud)

为什么oget包含在第一个列表中,而不是第二个列表?

tke*_*win 34

is测试对象标识,但==测试对象值相等:

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

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

In [4]: a == b
Out[4]: True
Run Code Online (Sandbox Code Playgroud)

  • 原因是op的示例中的字符串不起作用是python将字符串赋值给变量的方法的工件.由于字符串是不可变的,因此在全局命名空间中,包含相同字符串的两个变量将引用同一个对象. (2认同)

小智 8

is not比较参考.==比较值

  • @ajwood:因为它们具有相同的价值。`==` 比较值。 (2认同)