web-dev-qa-db-ja.com

「is none」と「== None」の違いは何ですか

私は最近この構文に出くわしましたが、その違いに気付いていません。

誰かが私に違いを教えてくれれば幸いです。

254
myusuf3

答えは こちら で説明されています。

引用するには:

クラスは、選択した方法で自由に比較を実装でき、Noneとの比較は何かを意味することを選択できます(実際には意味があります。それ自体に対して?)。

実際には、カスタム比較演算子はまれであるため、大きな違いはありません。ただし、is Noneを一般的な規則として使用する必要があります。

231
Ben Hoffstein
class Foo:
    def __eq__(self,other):
        return True
foo=Foo()

print(foo==None)
# True

print(foo is None)
# False
121
unutbu

この場合、それらは同じです。 Noneはシングルトンオブジェクトです(Noneは1つしか存在しません)。

isは、オブジェクトが同じオブジェクトであるかどうかを確認し、==は、それらが同等であるかどうかを確認します。

例えば:

p = [1]
q = [1]
p is q # False because they are not the same actual object
p == q # True because they are equivalent

ただし、Noneは1つしかないため、常に同じになり、isはTrueを返します。

p = None
q = None
p is q # True because they are both pointing to the same "None"
45
Donald Miner

Numpyを使用する場合、

if np.zeros(3)==None: pass

numpyが要素ごとの比較を行うとエラーが発生します

2
jf328