I definiert eine Klasse:Python-Hash() kann Long-Integer nicht behandeln?
class A: ''' hash test class >>> a = A(9, 1196833379, 1, 1773396906) >>> hash(a) -340004569 This is weird, 12544897317L expected. ''' def __init__(self, a, b, c, d): self.a = a self.b = b self.c = c self.d = d def __hash__(self): return self.a * self.b + self.c * self.d
Warum im doctest, Hash() Funktion eine negative ganze Zahl gibt?
Nitpick: (12544897317 & 0xFFFFFFFF) - (1 << 32) ist nicht -340004569; es ist -340004571. Python erreicht tatsächlich die 32-Bit-Nummer durch * Re-Hashing *; d.h. Berechnen von Hash (12544897317). Dies ist besser, weil es nicht nur die höherwertigen Bits des ursprünglichen Hash-Werts wegwirft, sondern diese stattdessen in den endgültigen Hash-Wert mischt. –
@Mark Dickinson, uh-huh, danke – inv