Ich arbeite mit Mengen von Integer-Matrizen, und ich dachte, sie als Tupel sinnvoll darzustellen, da sie hashable sind. Doch die Hash() Funktion gab mir seltsame Ergebnisse für Tupeln:Hashing verschiedene Tupel in Python geben identische Ergebnis
hash(((1, -1, 0), (1, 0, 0), (1, 0, -1)))
Out[147]: -697649482279922733
hash(((1, 0, -1), (1, 0, 0), (1, -1, 0)))
Out[148]: -697649482279922733
Wie Sie sehen können, diese beiden unterschiedlichen Tupel haben den gleichen Hash-Wert. Beachten Sie, dass sie tatsächlich ziemlich ähnlich sind (Austausch der ersten und letzten Subtrahle), jedoch konnte ich kein minimaleres Beispiel finden: ((0,1),(0,0))
und ((0,0),(0,1))
haben unterschiedliche Hashwerte.
Irgendwelche Ahnung von was ist los? Ich kann nicht glauben, dass es nur unglaublich schlechtes Glück ist ... Jetzt, wo ich das Problem gefunden habe, konnte ich es leicht umgehen, aber ich dachte, es wäre trotzdem erwähnenswert.
Sie haben unglaublich Pech. –
Warum würde dies Probleme verursachen? – Caramiriel
Obwohl ich darin übereinstimmen, dass Sie Pech haben, sind Hash-Funktionen normalerweise nicht bijektiv (abgesehen von "perfektem Hashing"), und das sollte normalerweise kein Problem sein, wie von @Caramiriel gezeigt. – tomasyany