What is the difference between "is None" and "== None"
The answer is explained here.
To quote:
A class is free to implement comparison any way it chooses, and it can choose to make comparison against None mean something (which actually makes sense; if someone told you to implement the None object from scratch, how else would you get it to compare True against itself?).
Practically-speaking, there is not much difference since custom comparison operators are rare. But you should use is None
as a general rule.
class Foo: def __eq__(self,other): return Truefoo=Foo()print(foo==None)# Trueprint(foo is None)# False
In this case, they are the same. None
is a singleton object (there only ever exists one None
).
is
checks to see if the object is the same object, while == just checks if they are equivalent.
For example:
p = [1]q = [1]p is q # False because they are not the same actual objectp == q # True because they are equivalent
But since there is only one None
, they will always be the same, and is
will return True.
p = Noneq = Nonep is q # True because they are both pointing to the same "None"