Possible Duplicate:
Python ‘==’ vs ‘is’ comparing strings, ‘is’ fails sometimes, why?
Is
a == b
the same as
a is b
?
If not, what is the difference?
Edit: Why does
a = 1
a is 1
return True, but
a = 100.5
a is 100.5
return False?
Possible Duplicate:
Python ‘==’ vs ‘is’ comparing strings, ‘is’ fails sometimes, why?
Is
a == b
the same as
a is b
?
If not, what is the difference?
Edit: Why does
a = 1
a is 1
return True, but
a = 100.5
a is 100.5
return False?
No, these aren't the same. is
is a check for object identity - ie, checking if a
and b
are exactly the same object. Example:
a = 100.5
a is 100.5 # => False
a == 100.5 # => True
a = [1,2,3]
b = [1,2,3]
a == b # => True
a is b # => False
a = b
a == b # => True
a is b # => True, because if we change a, b changes too.
So: use ==
if you mean the objects should represent the same thing (most common usage) and is
if you mean the objects should be in identical pieces of memory (you'd know if you needed the latter).
Also, you can overload ==
via the __eq__
operator, but you can't overload is
.
As already very clearly explained above.
is : used for identity testing (identical 'objects')
== : used for equality testing (~~ identical value)
Also keep in mind that Python uses string interning (as an optimisation) so you can get the following strange side-effects:
>>> a = "test"
>>> b = "test"
>>> a is b
True
>>> "test_string" is "test" + "_" + "string"
True
>>> a = 5; b = 6; c = 5; d = a
>>> d is a
True # --> expected
>>> b is a
False # --> expected
>>> c is a
True # --> unexpected