私は最近この構文に出くわしましたが、その違いに気付いていません。
誰かが私に違いを教えてくれれば幸いです。
答えは こちら で説明されています。
引用するには:
クラスは、選択した方法で自由に比較を実装でき、Noneとの比較は何かを意味することを選択できます(実際には意味があります。それ自体に対して?)。
実際には、カスタム比較演算子はまれであるため、大きな違いはありません。ただし、is None
を一般的な規則として使用する必要があります。
class Foo:
def __eq__(self,other):
return True
foo=Foo()
print(foo==None)
# True
print(foo is None)
# False
この場合、それらは同じです。 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"
Numpyを使用する場合、
if np.zeros(3)==None: pass
numpyが要素ごとの比較を行うとエラーが発生します