Welche typische Datenstruktur wird verwendet, um den integrierten Listendatentyp von Python zu implementieren?Was ist die zugrunde liegende Datenstruktur für Python-Listen?
Antwort
Listenobjekte sind als Arrays implementiert. Sie sind für schnelle Operationen mit fester Länge optimiert und verursachen O (n) Speicherbewegungskosten für pop (0) und Operationen (0, v), die sowohl die Größe als auch die Position der zugrunde liegenden Datendarstellung ändern.
Siehe auch: http://docs.python.org/library/collections.html#collections.deque
Btw, ich finde es interessant, dass die Python-Tutorial auf Datenstrukturen empfehlen Pop mit (0) einer Warteschlange zu simulieren, aber nicht O (n) oder die deque Option erwähnen .
http://docs.python.org/tutorial/datastructures.html#using-lists-as-queues
Sehr guter Punkt über das Tutorial! Das sollte behoben werden. –
Das Tutorial existierte lange lange vor dem Deque-Modul, deshalb. Melden Sie es an bugs.python.org, wenn möglich mit einem Patch für einen korrekten Satz und das Tutorial gibt keine falschen Hinweise mehr. –
CPython:
typedef struct {
PyObject_VAR_HEAD
/* Vector of pointers to list elements. list[0] is ob_item[0], etc. */
PyObject **ob_item;
/* ob_item contains space for 'allocated' elements. The number
* currently in use is ob_size.
* Invariants:
* 0 <= ob_size <= allocated
* len(list) == ob_size
* ob_item == NULL implies ob_size == allocated == 0
* list.sort() temporarily sets allocated to -1 to detect mutations.
*
* Items must normally not be NULL, except during construction when
* the list is not yet visible outside the function that builds it.
*/
Py_ssize_t allocated;
} PyListObject;
Wie in der folgenden Zeile zu sehen ist, wird die Liste als ein Array von Zeigern auf PyObjects
erklärt.
PyObject **ob_item;
Im Jython implementation, es ist ein ArrayList<PyObject>
.
- 1. Was ist der zugrunde liegende Transport für D-Bus?
- 2. Was ist die zugrunde liegende Struktur von std :: initializer_list?
- 3. Was ist das zugrunde liegende Thema in OSGi?
- 4. Firebase Callbacks - was ist der zugrunde liegende Trigger?
- 5. Was ist der zugrunde liegende Container in einer Java-Zeichenfolge?
- 6. Reagieren: Werden Schlüssel neu zugewiesen, wenn die zugrunde liegende Datenstruktur geändert wurde?
- 7. Was ist die effizienteste Datenstruktur für Keywords?
- 8. Was ist die zugrundeliegende Datenstruktur eines STL-Sets in C++?
- 9. JPA-Entität ohne zugrunde liegende Tabelle
- 10. Wie weist Lisp dynamisch Symbole zu? Zugrunde liegende Datenstruktur/Mechanismus eines Lisp-Symbols?
- 11. Entity Framework: "Der zugrunde liegende Provider ist beim Öffnen fehlgeschlagen"
- 12. Wie funktioniert Object.toString() für verschiedene zugrunde liegende Typen?
- 13. Die zugrunde liegende Magie von -webkit-backface-Sichtbarkeit
- 14. Kann das zugrunde liegende Modul für 'RealmSwift' nicht laden
- 15. DataSet-zugrunde liegende Verbindung explizit schließen?
- 16. Die zugrunde liegende ObjectDataSource aus einer GridView holen
- 17. GridView wird die zugrunde liegende Datenquelle nicht aktualisieren
- 18. Erkennen Sie die zugrunde liegende Plattform/Geschmack in Cmake
- 19. Entity Framework - Die zugrunde liegende Anbieter schlug fehl am Connection
- 20. Holen Sie sich das die zugrunde liegende Variable eines Aufzählungs
- 21. Was ist die beste C# Datenstruktur für die folgende Situation?
- 22. Was sind darunter liegende Container?
- 23. Was ist die Datenstruktur hinter Clojures Sets?
- 24. A * Was ist die beste Datenstruktur für den offenen Satz?
- 25. Was ist die beste Datenstruktur für eine Nachkommenschaft?
- 26. Die zugrunde liegende Verbindung wurde geschlossen: Ein unerwarteter Fehler ist aufgetreten auf einem Sende .--- NuGet
- 27. Entity Framework: Handle Fehler der zugrunde liegende Provider nicht öffnen
- 28. Das zugrunde liegende SQL in der Spring JdbcTemplate sehen?
- 29. Die zugrunde liegende Verbindung wurde geschlossen: Ein unerwarteter Fehler ist aufgetreten
- 30. C# DataGridView Sortierung mit Generic List als zugrunde liegende Quelle
zwei Möglichkeiten: 1) nur Neugier, oder 2) vorzeitige Optimierung. – flybywire
Jemand hat mir diese Frage gestellt und ich sagte ihnen, dass meine Intuition war, dass die Implementierung Array-basiert war, aber ich war mir nicht sicher. Das hat meine Neugier etwas erhöht und ich entscheide mich zu fragen. – Nixuz
Ob Sie es glauben oder nicht, ich habe ein paar Minuten für die Antwort gegoogelt und selbst wenn ich den Quellcode heruntergeladen hätte, würde ich wahrscheinlich nicht wissen, wo ich anfangen soll. Ich nahm an, dass jemand hier die Antwort mit minimalem Aufwand kennen würde und es scheint, dass ich recht hatte. Einfacher Ruf für sie, schnelle Antwort für mich, jeder gewinnt. – Nixuz