Следующая информация взята из документации по Python v3.1.2:
Из справочного раздела по языку Python 3.3.1 Основные настройки:
object.__hash__(self)
... User-defined classes have __eq__() and __hash__() methods
by default; with them, all objects compare unequal (except
with themselves) and x.__hash__() returns id(x).
Из словаря:
hashable
... Objects which are instances of user-defined classes are
hashable by default; they all compare unequal, and their hash
value is their id().
Это верно для версии 2.6.5:
Python 2.6.5 (r265:79096, Mar 19 2010 21:48:26) ...
...
>>> class C(object): pass
...
>>> c = C()
>>> id(c)
11335856
>>> hash(c)
11335856
Но в версии 3.1.2:
Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) ...
...
>>> class C: pass
...
>>> c = C()
>>> id(c)
11893680
>>> hash(c)
743355
Так что же это?Должен ли я сообщать об ошибке документации или об ошибке программы?И если это ошибка документации, и значение hash()
по умолчанию для экземпляра пользовательского класса больше не совпадает со значением id()
, то было бы интересно узнать, что это такое и как оно рассчитывается, и почему онобыл изменен в версии 3.