Pythons Set-Element-Reihenfolge entmystifiziert
Sets in Python sind ungeordnete Sammlungen, aber bestimmte Muster tauchen in ihrer angezeigten Reihenfolge auf. Trotz der scheinbaren Konsistenz resultiert diese Reihenfolge aus dem Hashing-Mechanismus von Python.
Hashing und Speicherplatzierung
Python hasht jedes Element und verwendet die letzten N Bits des Hashs als Array Indizes für die Speicherplatzierung. Die Reihenfolge der Elemente im Speicher bestimmt somit deren angezeigte Reihenfolge.
Kollisionsauflösung
Wenn zwei Elemente denselben Hash haben, platzieren Kollisionsauflösungsmechanismen sie an alternativen Speicherorten. Die Reihenfolge der Elementeinfügung (wenn nur ein Element oder mehrere Elemente mit demselben Hash vorhanden sind) beeinflusst die genaue Position der Elemente im Speicher.
Beispiel
In In den folgenden Beispielen ist die Reihenfolge der Elemente im gedruckten Satz aufgrund der Kollisionsauflösung konsistent:
set_1 = set([5, 2, 7, 2, 1, 88]) set_1 # set([88, 1, 2, 5, 7]) set_2 = set([8, 16, 24]) set_2 # set([8, 16, 24])
Beachten Sie, dass eine Änderung der Einfügereihenfolge in der Eingabeliste die angezeigte ändern kann Reihenfolge, wenn Schlüsselkollisionen vorliegen. Zum Beispiel:
set_3 = set([24, 16, 8]) set_3 # set([24, 16, 8])
Eindeutige Hashes und Beibehaltung der Reihenfolge
In Fällen, in denen Elemente eindeutige Hashwerte haben, bleibt die Einfügereihenfolge erhalten:
set_4 = set([1, 2, 3]) set_4 # set([1, 2, 3])
Hinweis:
Die beschriebene Implementierung gilt für CPythons Diktat festgelegt und kann in bestimmten Versionen unterschiedlich sein. Das allgemeine Prinzip des Hashings und der Speicherplatzierung bleibt jedoch dasselbe.
Das obige ist der detaillierte Inhalt vonWarum zeigt Pythons Set Elemente scheinbar geordnet an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!