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
.
Peter
2009-10-27 23:44:01