What is the difference between "is None" and "== None"
--
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzle Game 2 Looping
--
Chapters
00:00 Question
00:24 Accepted answer (Score 452)
01:03 Answer 2 (Score 223)
01:14 Answer 3 (Score 69)
01:51 Answer 4 (Score 44)
02:27 Thank you
--
Full question
https://stackoverflow.com/questions/3257...
Accepted answer links:
[here]: http://jaredgrubb.blogspot.com/2009/04/p...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python
#avk47
ACCEPTED ANSWER
Score 508
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.
ANSWER 2
Score 238
class Foo:
def __eq__(self, other):
return True
foo = Foo()
print(foo == None)
# True
print(foo is None)
# False
ANSWER 3
Score 70
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 object
p == 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 = None
q = None
p is q # True because they are both pointing to the same "None"
ANSWER 4
Score 8
If you use numpy,
if np.zeros(3) == None: pass
will give you an error when numpy does elementwise comparison.