[Python-Dev] redefining is
Robert Brewer
fumanchu at amor.org
Fri Mar 19 12:55:42 EST 2004
Andrew Koenig wrote:
>8
> The original author of the proposal on comp.lang.python was clearly
> disturbed at getting object identity when equivalence would
> have made more
> sense, and was proposing to change things as follows:
>
> x == y Value equality
>
> x is y Object equivalence
>
> id(x) == id(y) Object identity
>
> I can completely understand why this change might be
> considered too large to make to an existing language--
> just like changing the wan C++ handles virtual
> destructors would be--but nevertheless I think it's
> interesting to consider the abstract merits of an
> idea such as this one, perhaps for the mythical
> Python 3.0.
>
> To put it another way: If the three operations above
> existed, I am finding it hard to think of many cases
> in which the third of these operations would
> be more useful than the second, which suggests that the
> second should be easier to express.
Wonderfully well-stated, Andrew; thanks for taking the time. You've
moved this topic out of the realm of "crackpot ideas" for me. ;)
Given the above, it seems reasonable to me that, rather than change the
behavior of "is", one should introduce a new operator (or function,
etc.). That is, instead of the above, I would expect:
Value equality: x == y
Object identity: x is y
or: id(x) == id(y)
Object equivalence: x equiv y
or: equiv(x, y)
The reasons being:
1. Backward compatibility, par for the course.
2. "A is B" in English is quite specifically about identity, not
equivalence. Can you think of a case where this is not so? If you can,
then I'd bet it's because "mutual substitutability" is always true for
identical objects--the equivalence is a side-effect of being identical.
Note that I'm not talking about "A is a B" or other statements. I also
assume, for Python, that if id(x) == id(y), then (x equiv y) would also
be True.
Now if we can only find a short English word that means "mutually
substitutable". ;)
Robert Brewer
MIS
Amor Ministries
fumanchu at amor.org
More information about the Python-Dev
mailing list