Sind Wörterbücher bestellt in Python 3.6+?

Wörterbücher sind bestellt in Python 3.6 (unter der CPython-Implementierung zumindest) anders als in früheren Inkarnationen. Dies scheint eine wesentliche änderung, aber es ist nur ein kurzer Absatz in der Dokumentation. Es wird beschrieben, wie ein CPython-Implementierung detail eher als eine Sprache verfügen, sondern bedeutet auch dies kann als standard in die Zukunft.

Wie funktioniert der neue Wörterbuch-Implementierung eine bessere Leistung als die älteren bei gleichzeitiger Beibehaltung element um?

Hier ist der text aus der Dokumentation:

dict() nutzt nun eine "kompakte" Darstellung Pionierarbeit von PyPy. Die Speicherauslastung der neuen dict() ist zwischen 20% und 25% kleiner im Vergleich zu Python 3.5. PEP 468 (Erhalt der Ordnung der **kwargs in einer Funktion.) umgesetzt wird dies. Die Reihenfolge-erhaltende Aspekt der neuen Implementierung ist als ein Implementierungsdetail und sollte nicht verlassen werden (dies könnte sich in Zukunft ändern, aber es wird gewünscht, diese neue dict-Umsetzung in die Sprache für ein paar releases, bevor die änderung der Sprache Skillung zu Mandat Auftrag-die Erhaltung der Semantik für alle gegenwärtigen und zukünftigen Python-Implementierungen; auch dies hilft bei der Erhaltung der rückwärts-Kompatibilität mit älteren Versionen der Sprache, wo zufällige iteration Bestellung ist noch immer in Kraft, z.B. Python 3.5). (Beigetragen von INADA Naoki in Problem 27350. Idee ursprünglich angeregt durch Raymond Hettinger.)

Update Dezember 2017: dicts Beibehaltung einsetzen, um ist garantiert für Python 3.7

Siehe diesen thread auf Python-Dev-mailing-list : mail.python.org/pipermail/python-dev/2016-September/146327.html, wenn Sie es noch nicht gesehen haben ; es ist im Grunde eine Diskussion rund um diese Themen.
Beachten Sie, dass vor langer Zeit (2003), Perl-Implementierung entschieden, um hash-Tabellen (äquivalent zu Python dictionaries) nicht nur explizit ungeordnet, aber randomisierten, aus Gründen der Sicherheit (perldoc.perl.org/perlsec.html#Algorithmic-Complexity-Attacks). Also ich würde auf jeden Fall nicht damit rechnen, dass dieses "feature", denn wenn die Erfahrung der anderen kann ein Führer sein, es ist wahrscheinlich gilt Umgekehrt werden, irgendwann...
Wenn kwargs sollen bestellt werden (die nette Idee) und kwargs sind dict, nicht OrderedDict, dann denke ich, könnte man davon ausgehen, dass dict-Schlüssel bleiben wird, bestellt in der zukünftigen version von Python, trotz der Dokumentation etwas anderes sagt.
Nein, nicht von dieser Annahme ausgehen. Dies war ein Thema während dem schreiben der PEP, der definiert, um die Erhaltung feature von **kwargs und als solche die Formulierung ist Diplomatisch: **kwargs in einer Funktion, die Signatur ist jetzt garantiert eine insertion-order-preserving Zuordnung. Sie haben den Begriff mapping, um Sie nicht zwingen einen anderen Implementierungen zu machen, die dict bestellt (und verwenden Sie ein OrderedDict intern) und als ein Weg, um zu signalisieren, dass dies nicht soll, hängt von der Tatsache, dass die dict ist nicht bestellt.
Eine gute video-Erklärung von Raymond Hettinger

InformationsquelleAutor Chris_Rands | 2016-10-11

Schreibe einen Kommentar