[Python-Dev] Re: redefining is

Casey Duncan casey at zope.com
Fri Mar 19 16:58:35 EST 2004


On Fri, 19 Mar 2004 16:50:01 -0500
"Andrew Koenig" <ark-mlist at att.net> wrote:

> > So identity means the same object, and implies equivalence.
> 
> Yes.
> 
> > Equivalence means they will always have the same value, even
> > if you do something to one and not the other.  This implies
> > (current value) equality.
> 
> Yes, unless equality is defined weirdly.  For example, IEEE
> floating-point NaN is supposed to be unequal to itself.
> 
> > equality just means that they have the same value *now*.
> 
> I'm not sure the implication goes the other way.  Consider a
> string-like type for which == ignores case.  Then equivalence implies
> identity, but not the other way.
> 
> > Since equivalence is a stronger form of equality, why not
> > just use "===".
> 
> Seems plausible.
> 
> > Anything that is === will also be ==, but the extra character
> > will mark it as special.  If the mark isn't strong enough,
> > perhaps "=~="; in math the ~ often modifies equality to mean
> > "not identical, but close enough".
> 
> I wish.  But unfortunately sometimes x == x is False.

Right, == is application defined. Whether 'a == b' has no bearing on
whether 'a is b' or whether a and b are equivilant. On that grounds I
think '===' might be misleading. I'm not convinced that equivilance
needs an operator at all, although I know Andrew would prefer that it be
as easy to use as 'is'. I think 'equivilant(a, b)' or somesuch would
suffice for me.

-Casey




More information about the Python-Dev mailing list