object identity and equivalence

Erno Kuusela erno-news at erno.iki.fi
Mon Nov 19 13:06:34 EST 2001


In article <b03e80d.0111190954.ce015b8 at posting.google.com>,
sandskyfly at hotmail.com (Sandy Norton) writes:

| I am a bit confused about when it is correct to use object identity
| "is" for comparisons and when I should use the equals '==' operator.

as a rule, a is b implies a == b (except for odd things like floating
point NaNs that compare inequal to themselves).

a == b does not imply a is b.

| I haven't personally come across cases where these two operators don't
| produce the same results with the same operands. Of course I am not
| assuming the semantic equivalence of the operators, as it makes sense
| that comparing object identity is the not the same as comparing object
| value. But could someone offer me an example that uses the same two
| operands with 'is' and '==' and produces 'different' results.

for some immutable objects like numbers and strings, python caches
some of those according to a few rules for efficiency reasons, so it
is unpredictable if a is b given two same-valued objects.

mutable objects like user class instances and lists and dictionaries
and such can not be cached.

| Aside: I'm assuming you can overload the '==' operator but not the
| 'is' operator? Is this true?

yes.

| There! I've announced my ignorance to the world. Feel better already!

congratulations :)

  -- erno



More information about the Python-list mailing list