Das Folgende ist aus der Python v3.1.2 Dokumentation:Im Gegensatz zu Python 3.1 Docs, Hash (Obj)! = ID (Obj). Also was ist richtig?
Vom Python Language Reference Abschnitt 3.3.1 Grund Anpassung:
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).
aus dem Glossar:
hashable
... Objects which are instances of user-defined classes are
hashable by default; they all compare unequal, and their hash
value is their id().
Dies gilt bis Version 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
Aber in Version 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
Also was ist das? Soll ich einen Dokumentationsfehler oder einen Programmfehler melden? Und wenn es ein Dokumentationsfehler ist, und der Standard Wert für einen Benutzer Klasseninstanz ist nicht mehr das gleiche wie der id()
Wert, dann wäre es interessant zu wissen, was es ist oder wie es berechnet wird, und warum es war in Version 3 geändert.
Nicht sicher, StackOverflow ist der richtige Ort, um dies zu sagen ... – Artelius
Beachten Sie, dass es nicht einmal unbedingt gilt, dass x -Bit Windows) wo 'id' Werte größer als' LONG_MAX' möglich sind, könnte der 'id (x)' Wert abgeschnitten werden, um den Hash zu erhalten. –