2010-06-12 5 views
10

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.

+0

Nicht sicher, StackOverflow ist der richtige Ort, um dies zu sagen ... – Artelius

+0

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. –

Antwort

10

Ich vermute, das war eine Änderung in Python 3.x gemacht, um die Leistung zu verbessern. Überprüfen Sie issue 5186, dann schauen ein wenig näher an Ihre mismatched Zahlen:

>>> bin(11893680) 
'0b101101010111101110110000' 
>>> bin(743355) 
'0b10110101011110111011' 
>>> 11893680 >> 4 
743355 

Es ist wahrscheinlich wert Berichterstattung als Dokumentation Bug.

+0

+1. Definitiv eine Berichterstattung wert. –

+0

Alle Fragen beantwortet, und mehr. Vielen Dank. –

Verwandte Themen