kbr hat geschrieben: ↑Donnerstag 27. Oktober 2022, 19:06
Hashable allein genügt nicht, es muss auch stets der gleiche hash-Wert erzeugt werden. Daher scheiden Datentypen mit mutablen Inhalten als Keys aus.
Das ist nicht korrekt. Um key in einem dictionary zu sein, reicht es aus, wenn hash() einen Wert liefert (d.h. wenn man __hash__() geeignet implementiert). Wenn sich der hash-Wert ändert, findet man den Schlüssel nicht mehr, das sollte man also auf keinen Fall tun. Der hash-Wert darf also nicht von den mutablen Teilen abhängen.
Ich habe z.B. schon gesehen, dass __hash__ die id zurückgibt.
Man könnte aber auch den hash von zwei Attributen verwenden, und alle anderen Attribute könnten dann veränderbar sein.
Oder der hash ist zwar veränderlich, aber die Objekte werden nicht verändert, während sie in ein set gesteckt werden oder so.
Wichtig: Aus Gleichheit von Objekten muss immer auch die Gleichheit der hashes folgen. (Laut Doku die einzige erforderliche Eigenschaft von __hash__().)
https://docs.python.org/3/reference/dat ... t.__hash__