¿Cuál es la estructura de datos subyacente típica utilizada para implementar el tipo de datos de lista integrado de Python?¿Cuál es la estructura de datos subyacente para las listas de Python?
Respuesta
Los objetos de lista se implementan como matrices . Están optimizados para operaciones de longitud fija e incurren O (n) costos de movimiento de memoria para pop (0) y operaciones de inserción (0, v) que cambian tanto el tamaño como la posición de la representación de datos subyacente .
Consulte también: http://docs.python.org/library/collections.html#collections.deque
Por cierto, me parece interesante que el tutorial de Python en las estructuras de datos recomienda el uso de pop (0) para simular una cola, pero no menciona O (n) o la opción deque .
http://docs.python.org/tutorial/datastructures.html#using-lists-as-queues
¡Muy buen punto sobre el tutorial! Eso debería ser arreglado. –
El tutorial existió mucho antes del módulo deque, por eso. Informar a bugs.python.org, si es posible con un parche para una oración correcta y el tutorial ya no da pistas incorrectas. –
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;
Como puede verse en la línea siguiente, la lista se declara como una matriz de punteros a PyObjects
.
PyObject **ob_item;
En el Jython implementation, es una ArrayList<PyObject>
.
- 1. ¿cuál es la estructura de datos subyacente de la lista, vector y conjunto de STL?
- 2. ¿Cuál es la mejor estructura de datos para autocompletar texto?
- 3. ¿Cuál es la estructura de datos de gráficos más eficiente en Python?
- 4. ¿Cuál es la biblioteca de estructura de datos de colección genérica más popular para C?
- 5. ¿Cuál es la diferencia entre conjuntos y listas en Python?
- 6. Estructura de datos utilizada para la estructura de directorios?
- 7. ¿Estructura de datos eficiente para las etiquetas?
- 8. ¿Cuál es la mejor estructura de datos para representar un tablero de damas cuando la velocidad es la principal preocupación?
- 9. ¿Cuál es la diferencia entre listas y tuplas en Python?
- 10. Python - eliminación de elementos de las listas
- 11. ¿Cuál es la diferencia entre plus y append en python para la manipulación de listas?
- 12. ¿Cómo encontrar dos listas con la misma estructura en python?
- 13. ¿cuál es la estructura de datos óptima para un contenedor de grupo?
- 14. ¿Cómo sincronizar las listas de Python?
- 15. Java - ¿Cuál es la mejor estructura de implementación para Graph?
- 16. ¿Cuál es la mejor estructura de datos adecuada para implementar editor como bloc de notas?
- 17. ¿Cuál es la forma más efectiva de insertar diccionarios/listas de Python en la base de datos SQL?
- 18. ¿Cuál es el tema subyacente en OSGi?
- 19. ¿Cuál es la práctica común para las enumeraciones en Python?
- 20. ¿Cuál es la diferencia entre las listas entre corchetes y paréntesis en Python?
- 21. Estructura de la base de datos para estructura de datos de árbol
- 22. ¿Cuál es la complejidad del tiempo de ejecución de las funciones de la lista de python?
- 23. ¿Una estructura de datos para mapeos 1: 1 en python?
- 24. ¿Cuál es el caso de uso para especificar el tipo subyacente en las enumeraciones?
- 25. Cuál es la mejor práctica para las listas de solo lectura en NHibernate
- 26. ¿Cuál es una buena estructura de datos para usar para contener dos valores?
- 27. ¿Cuál es la estructura de datos OCaml estándar con la iteración más rápida?
- 28. ¿Cuál es la estructura de la base de datos de sonar?
- 29. A * ¿cuál es la mejor estructura de datos para el conjunto abierto?
- 30. ¿Cuál es el transporte subyacente para D-Bus?
dos opciones: 1) simplemente curiosidad, o 2) la optimización prematura. – flybywire
Alguien más me hizo esta pregunta y les dije que mi intuición era que la implementación se basaba en una matriz, pero no estaba seguro. Esto hizo que mi curiosidad aumentara un poco, así que decidí preguntar. – Nixuz
Créalo o no. Pasé un par de minutos buscando en Google la respuesta e incluso si hubiera descargado el código fuente, probablemente no sabría por dónde empezar. Pensé que alguien aquí sabría la respuesta con un mínimo esfuerzo y parece que tenía razón. Representación fácil para ellos, respuesta rápida para mí, todos ganan. – Nixuz