Heim > Backend-Entwicklung > Python-Tutorial > Warum scheinen Python-Sets eine Reihenfolge zu haben?

Warum scheinen Python-Sets eine Reihenfolge zu haben?

Barbara Streisand
Freigeben: 2024-11-14 22:27:02
Original
640 Leute haben es durchsucht

Why Do Python Sets Appear to Have an Order?

Verstehen der scheinbaren Reihenfolge in Python-Sets

Während Python-Sets von Natur aus ungeordnet sind, hat die scheinbar konsistente Anzeigereihenfolge Fragen aufgeworfen. In diesem Artikel wird der Mechanismus hinter dieser scheinbaren Reihenfolge untersucht.

Hashing und Speicherplatzierung

Python verwendet Hashing, um die Speicherplatzierung für Elemente in einer Menge zu bestimmen. Der Hash jedes Elements wird berechnet und die letzten N Bits (bestimmt durch die Größe des Satzes) werden als Array-Indizes verwendet. Dies erklärt, warum Elemente mit bestimmten Hash-Werten an bestimmten Speicherorten landen.

Kollisionsauflösung

Wenn Hash-Kollisionen auftreten (wenn zwei Elemente den gleichen Hash haben), a Der Kollisionsauflösungsalgorithmus greift ein. Dieser Algorithmus bestimmt, welche Elemente die „besten“ Speicherplätze belegen. Der Auflösungsprozess bestimmt teilweise die Reihenfolge der Elemente innerhalb des Satzes.

Einfügereihenfolge (Python 3.6 und höher)

Ab CPython 3.6 wurden Wörterbücher (nicht Sätze) hinzugefügt die Möglichkeit, die Einfügereihenfolge für die Iteration beizubehalten. Mit dieser Funktion können Elemente in derselben Reihenfolge iteriert werden, in der sie eingefügt wurden, auch wenn ihre Hashes in Konflikt stehen. Diese Beibehaltung der Einfügungsreihenfolge wird jedoch derzeit nicht auf Sets ausgeweitet.

Beispiele

Betrachten Sie die folgenden Beispiele:

set_1 = set([5, 2, 7, 2, 1, 88])
set_2 = set([5, 2, 7, 2, 1, 88])
print(set_1)  # prints set([88, 1, 2, 5, 7])
print(set_2)  # prints set([88, 1, 2, 5, 7])
Nach dem Login kopieren

In diesem Fall Die konsistente Reihenfolge ist auf identische Hashwerte für alle Elemente zurückzuführen. Hash-Kollisionen führen zu derselben Kollisionsauflösung und damit zu einer identischen Reihenfolge.

Diese Reihenfolge ist jedoch nicht garantiert und kann sich ändern, wenn Elemente in einer anderen Reihenfolge eingefügt werden oder sich Hashes ändern. Zum Beispiel:

list1 = [8, 16, 24]
set(list1)        # prints set([8, 16, 24])
list2 = [24, 16, 8]
set(list2)        # prints set([24, 16, 8])
Nach dem Login kopieren

Die umgekehrte Reihenfolge im zweiten Satz ist ein Ergebnis unterschiedlicher Kollisionsauflösungsergebnisse aufgrund der Neuordnung der Eingabeliste.

Schlussfolgerung

Die scheinbare Reihenfolge in Python-Sets ergibt sich aus einer Kombination aus Hashing, Speicherplatzierung und Kollisionsauflösung. Obwohl die Einfügungsreihenfolge nicht garantiert ist, kann sie in einigen Szenarien aufgrund der Hash-Konsistenz und der Ergebnisse der Kollisionsauflösung auftreten.

Das obige ist der detaillierte Inhalt vonWarum scheinen Python-Sets eine Reihenfolge zu haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage