Ein Hash ist nur ein Wert, der von den gegebenen Daten abgeleitet wird. Es wird auf eine Weise berechnet, von der man hofft, dass sie einen einzigartigen Wert für einzigartige Daten liefert, obwohl dies nicht garantiert ist, da sie oft weit weniger Bits enthält als die Daten selbst.
Der Hashwert kann eine beliebige Zahl sein. Angenommen, Sie können einen Wert von __hash__()
erhalten, den Sie möglicherweise von einem Randomizer erhalten.
Anscheinend ist der Hash-Wert für eine ganze Zahl ist einfach selbst, weil ein eigener Wert der ganzen Zahl eindeutig identifiziert sie, so erhalten Sie eine 1 aus einem 1.
Der Hash-Wert für einen String ein Wert ist, der auf basiert einige Berechnungen mit jedem Zeichen in der Zeichenfolge. Daher ist es viel weniger vorhersehbar und kann sehr oft sehr groß und möglicherweise negativ sein. So läuft es.
Beachten Sie, dass s[0]
konzeptionell das erste Zeichen der Zeichenfolge ist, aber es ist Hashed als eine Zeichenfolge aus einem Zeichen, weshalb Sie einen anderen, wenn auch ähnlichen Wert im Vergleich zu s
selbst erhalten.
In Python passieren die meisten kleinen 'int's Hash an sich selbst, offensichtlich können Strings das nicht, was findest du hier überraschend? Was genau ist deine Frage? –
Was meinst du * "wie" *? Dies ist ein Implementierungsdetail auf Interpreterebene; Das Verhalten von CPython kann sich von anderen unterscheiden. Siehe z.B. https://docs.python.org/3/library/functions.html#hash, https://docs.python.org/3/reference/datamodel.html#object.__hash__. – jonrsharpe
Ich denke, Hash-Wert kann ein Speicherort sein. string und tuple sind hashbar und list und dict sind nicht hashbar. Was ist Hashwert? – Artier