Are there any list comparison optimizations in Python?

Tim Peters tim at zope.com
Tue Nov 13 11:54:47 EST 2001


[Michael Hudson]
> I'm pretty sure that in Python <2.1 this "optimization" was enabled
> for all comparisons (i.e. if "x is y", then "x == y" returns 1 without
> calling any comparison methods).

Yes.

> It disappeared when rich comparisons turned up; for one thing NaNs
> sohuld not compare equal to themselves according to ieee754 (tho' they
> still seem to in 2.2).

This is a platform-dependent crapshoot:  it depends on what the platform C
does.  For paradoxical(*) reasons, it gives the illusion of working on
Windows (under MSVC) today:

>>> x = 1e300
>>> x *= x     # build an infinity
>>> x
1.#INF
>>> n = x - x  # build a NaN
>>> n
-1.#IND
>>> n == n
0
>>>

OTOH, 754 doesn't specify language bindings, and Python doesn't say anything
about 754, so the notion that Python "==" maps to 754's equality operator is
presumption on both ends <wink>.


(*) It's "paradoxical" because MSVC doesn't generate correct fp comparison
from 754's viewpoint.  But toss in a few other accidents, and by the time
Python reports a result, an even number of mistakes cancel out.





More information about the Python-list mailing list