Diese wiki.python.org Seite auf algorithmische Komplexität einiger Datenstrukturen sagt der folgende für ein collections.deque
Objekt:Warum ist das Hinzufügen oder Entfernen von der Mitte eines collections.deque langsamer als das Nachschlagen?
A deque (Deque) wird intern als doppelt verknüpfte Liste dargestellt. (Nun, eine Liste von Arrays anstelle von Objekten, für mehr Effizienz.) Beide Enden sind zugänglich, aber selbst in der Mitte ist langsam, und Hinzufügen oder Entfernen von der Mitte ist noch langsamer.
Zwei Fragen:
1) ist das Hinzufügen zu der Mitte eines deque
überhaupt möglich? Ich sehe keine Methode, dies in der API zu tun.
2) Warum sollte das Entfernen (oder Hinzufügen) langsamer sein als das Suchen in der Mitte eines deque
? Es handelt sich um eine doppelt verknüpfte Liste. Daher sollte add/remove eine konstante Zeitoperation sein, sobald Sie das Objekt gefunden haben, das Sie hinzufügen möchten.
Was Sie am Ende bedeuten, wenn Sie den Speicher für einen 'list' sagen„alle eins Brocken "? Python-Listen sind zusammenhängende Arrays * von Zeigern * nicht zusammenhängende Arrays * von Speicher *. Das heißt, die Zeiger sind zusammenhängend, aber was auch immer sie zeigen, kann überall sein, und es ist einer der Hauptgründe für gebrochenes Gedächtnis in Python. Denken Sie nur daran, Listenelement 2 willkürlich einem großen, vorab zugewiesenen Objekt zuzuweisen, wie 'my_list [1] = irgendein_Objekt'. Ich bin wahrscheinlich nur durch Ihre Formulierungen verwirrt, aber Sie sagen das sicher nicht alles von "my_lists" wird "memory" für das große 'some_object' herumgemischt? – ely
Nein, ich meine nur, dass das Löschen oder Einfügen von Elementen in einer "Liste" nur das Verschieben eines einzelnen Speicherbereichs erfordert. Es sind die Zeiger, die bewegt werden, stimmt. – kindall
Gotcha, danke für die Klärung. Für alle anderen, die auf diese Kommentare stolpern, verweise ich grundsätzlich auf die Erklärung aus Jake VanderPlas Artikel ["Warum Python langsam ist"] (https://jakevdp.github.io/blog/2014/05/09/why-python- is-slow /), speziell in Abschnitt 3 des Objektmodells. – ely