[Python-ideas] Fwd: Why do equality tests between OrderedDict keys/values views behave not as expected?

Stephen J. Turnbull stephen at xemacs.org
Sat Dec 19 02:20:51 EST 2015


Steven D'Aprano writes:

 > I don't know what Guido means by "values might not be comparable",

Guido evidently meant something more pragmatic, but as I see it,
values of different types are in principle incomparable, and the 
odict == dict == odict example shows why: satisfying the equality
definitions of different types simultaneously is often impossible.
But if you transform them to a common type or unify them in a union
type, I think it's reasonable to expect that the common type will
implement equality as an equivalence relation.  (As you indirectly
mentioned yourself, that's why we accept objects like NaN only as a
last resort in preserving compatibility with a truly important
standard we can't change.)

In Python, the TOOWTDI common type for fallback is object, and that
works well enough as a default implementation of __eq__ (ie, "is")
that allows for equality comparison across types, which can be useful.

 > but your example is lack of transitivity.

 > Mathematical equality is transitive: if a == b, and b == c, then a == c. 
 > But that doesn't extend to non-numeric concepts of equality, e.g. 
 > preference ordering, or other forms of ranking.

Indifference (the notion of "equality" that applies to preference, at
least in economics) in practice is always an equivalence; all use
cases I know of require this (many strengthen it to actual equality,
ie, requiring antisymmetry).  I can't think of a case where I would
consider any equality relation deliberately defined as not an
equivalence to be anything but perverse.  So I'm not sure what you're
trying to say here.

I guess you mean that as a pragmatic matter, a programming language
may allow perverse definitions, and of course there may be artifacts
of particular definitions such that objects of types that should
always be considered unequal might compare equal.  I suppose there are
"consenting adults" cases where it's convenient for a particular use
case to use a perverse definition.  And yes, I consider "fall back to
the less restrictive definition of equality", as done by OrderedDict
and dict in the example, to be perverse.



More information about the Python-ideas mailing list