[Python-Dev] For Python 3k, drop default/implicit hash, and comparison
jim at zope.com
Sun Nov 6 17:15:58 CET 2005
The recent discussion about what the default hash and equality comparisons
should do makes me want to chime in.
IMO, the provision of defaults for hash, eq and other comparisons
was a mistake. I'm especially sensitive to this because I do a lot
of work with persistent data that outlives program execution. For such
objects, memory address is meaningless. In particular, the default
ordering of objects based in address has caused a great deal of pain
to people who store data in persistent BTrees.
Oddly, what I've read in these threads seems to be arguing about
which implicit method is best. The answer, IMO, is to not do this
implicitly at all. If programmers want their objects to be
hashable, comparable, or orderable, then they should implement operators
explicitly. There could even be a handy, but *optional*, base class that
provides these operators based on ids.
This would be too big a change for Python 2 but, IMO, should definately
be made for Python 3k. I doubt any change in the default definition
of these operations is practical for Python 2. Too many people rely on
them, usually without really realizing it.
Lets plan to stop guessing how to do hash and comparison.
Explicit is better than implicit. :)
Jim Fulton mailto:jim at zope.com Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
More information about the Python-Dev