Implementación de lista en Python
Este artículo presenta cómo se implementa la lista en Python.
Las listas son particularmente útiles en Python. Echemos un vistazo a cómo se implementan las listas internamente.
Mira este sencillo programa que agrega algunos números enteros a una lista y luego la imprime.
Como puedes ver, la lista se puede iterar.
La lista en Python está representada por la siguiente estructura en lenguaje C. Ob_item es una matriz de punteros que se utiliza para guardar elementos y asignado es la capacidad de memoria total preasignada por ob_item.
Veamos qué sucede cuando se inicializa una lista vacía L = []
Conociendo el tamaño del espacio de memoria solicitado por la lista (luego reemplazado por asignado) y los elementos de almacenamiento reales de la lista La relación entre el espacio ocupado (ob_size) es muy importante. El tamaño de ob_size es el mismo que el tamaño de len(L), y el tamaño asignado es la cantidad de espacio que se ha solicitado en la memoria. Por lo general, verá que el valor de asignado es mayor que el valor de ob_size. Esto es para evitar llamar a realloc para la asignación de memoria cada vez que se agrega un nuevo elemento a la lista. Veremos más sobre estos a continuación.
Añadimos un número entero a la lista: L.append(1). ¿Qué pasó? Se llama a la función interna de C app1().
Echemos un vistazo a list_resize(). List_resize() solicitará espacio adicional para evitar llamar a la función list_resize() varias veces. El modelo de crecimiento de la lista es: 0, 4, 8, 16, 25, 35, 46, 58, 72, 88,...
Abra cuatro espacios de memoria para almacenar los elementos de la lista y almacenar el primer elemento es 1. Como puede ver en la imagen a continuación, L [0] apunta al elemento que acabamos de agregar. El cuadro de puntos indica el espacio de memoria que se ha solicitado pero que aún no se ha utilizado.
Ahora insertemos un número entero 5 en la primera posición de la lista: L.insert(1, 5) y veamos qué sucede dentro. Se llama a Ins1().
Cuando abres el último elemento de la lista: L.pop(). Llame a listpop(). Si ob_size es menos de la mitad del asignado, se llama a list_resize dentro de la función listpop(). En este punto, se reducirá el espacio de memoria solicitado.
La complejidad temporal de Pop es O(1).
Los objetos de lista de Python tienen un método para eliminar elementos específicos. Lista de llamadas remove().
Cortar lista y eliminar elementos, llame a list_ass_slice() para ver cómo funciona list_ass_slice(). Aquí, el bit bajo es 1 y el bit alto es 2. Eliminamos los datos 5 almacenados en el espacio de memoria 1.
La complejidad temporal de la eliminación es O(n)
La parte de clasificación de la lista no está traducida.
Molécula dura