Las listas de Python se implementan utilizando una matriz redimensionable de referencias a otros objetos. Esto proporciona una búsqueda O (1) en comparación con la búsqueda O (n) para una implementación de lista vinculada.
Ver How are lists implemented?
Como usted ha mencionado, esta aplicación hace que las inserciones en el comienzo o la mitad de una lista de Python lenta porque cada elemento de la matriz a la derecha del punto de inserción tiene que ser cambiado a lo largo de un elemento. Además, algunas veces la matriz tendrá que cambiar su tamaño para acomodar más elementos. Para insertar en una lista vinculada, aún necesitará O (n) tiempo para encontrar la ubicación donde va a insertar, pero la inserción real será O (1), ya que solo necesita cambiar las referencias en los nodos inmediatamente. antes y después de su punto de inserción (suponiendo una lista doblemente vinculada).
Por lo tanto, la decisión de hacer que las listas de Python usen matrices dinámicas en lugar de listas vinculadas no tiene nada que ver con la "madurez" de la implementación del idioma. Simplemente hay intercambios entre diferentes estructuras de datos y los diseñadores de Python decidieron que los arreglos dinámicos eran la mejor opción en general. Es posible que hayan asumido que indexar una lista es más común que insertar datos en ella, por lo que las matrices dinámicas son una mejor opción en este caso.
Consulte la tabla siguiente en el artículo matriz Wikipedia dinámico para una comparación de diversas características de rendimiento de estructura de datos:
https://en.wikipedia.org/wiki/Dynamic_array#Performance
se podría implementar uno bastante trivial y utilizarlo si quería demasiado, pero sería más lento acceso ... –
Cada estructura de datos tiene sus compensaciones. Python eligió uno que no era óptimo para las inserciones. –
Ver las respuestas a [esta pregunta] (http: // stackoverflow.com/questions/7477181/array-based-vs-list-based-stacks-and-queues) para revisar las compensaciones. –