Estructuras de datos¶
Python incluye varias estructuras de datos de programación estándar, como
list
, tuple
, dict
, y set
, como parte de sus tipos incorporados.
Muchas aplicaciones no requieren otras estructuras, pero cuando lo hacen, la
biblioteca estándar proporciona versiones poderosa y bien probadas que están
listas para ser usadas.
El módulo enum
proporciona una implementación del tipo enumeración,
con capacidades de iteración y comparación. Se puede usar para crear símbolos
bien definidos para valores, en lugar de usar cadenas literales o enteros.
El módulo collections
incluye implementaciones de varias estructuras de
datos que amplían las encontradas en otros módulos. Por ejemplo, Deque
es
una cola de doble extremo, que permite la adición o eliminación de elementos de
ambos extremos. El defaultdict
es un diccionario que responde con un valor
predeterminado si falta una clave, mientras que OrderedDict
recuerda la
secuencia en la que se agregan los elementos a ésta. namedtuple
extiende
el tuple
normal para dar a cada elemento un nombre de atributo además de un
índice numérico.
Para grandes cantidades de datos, un array
puede hacer un uso más
eficiente de memoria que una list
. Como el array
está limitado a un
solo tipo de datos, puede usar una representación de memoria más compacta que
una list
de propósito general. Al mismo tiempo, las instancias de
array
se pueden manipular usando muchos de los mismos métodos que list
,
por lo que es posible reemplazar una list
con un array
en una
aplicación sin muchos cambios
Ordenar elementos en una secuencia es un aspecto fundamental de la manipulación
de datos. La list
de Python incluye un método sort()
, pero a veces es
más eficiente mantener una lista ordenada sin volver a clasificarla cada vez
que su contenido cambia. Las funciones en heapq
modifican el contenido
de una lista mientras preservan el orden de la lista con poca sobrecarga.
Otra opción para crear listas ordenadas o arrays es bisect
. Este
utiliza una búsqueda binaria para encontrar el punto de inserción para nuevos
elementos, y es una alternativa a ordenar repetidamente una lista que cambia
frecuentemente.
Aunque la list
incorporada puede simular una cola usando los métodos
insert()
y pop()
, no es segura para subprocesos. Para una comunicación
ordenada entre hilos de verdad usa el módulo queue
.
multiprocessing
incluye una versión de Queue
que funciona entre
procesos, haciendo más fácil convertir un programa multi-hilo para que use
procesos en su lugar.
struct
es útil para decodificar datos de otra aplicación, quizás
viniendo de un archivo binario o una secuencia de datos, en tipos Python
nativos para una manipulación más fácil.
Este capítulo cubre dos módulos relacionados con la gestión de la memoria.
Para estructuras de datos altamente interconectadas, como gráficos y árboles,
usa weakref
para mantener referencias mientras se permite que el
recolector de basura limpie los objetos una vez que ya no son necesarios.
Utiliza las funciones en copy
para duplicar estructuras de datos y sus
contenidos, incluida la realización de copias recursivas con deepcopy()
.
La depuración de las estructuras de datos puede llevar mucho tiempo,
especialmente cuando recorriendo la salida impresa de grandes secuencias o
diccionarios. Utiliza pprint
para crear representaciones fáciles de
leer que pueden ser impresas en la consola o escritas en un archivo de registro
para una depuración más fácil.
Finalmente, si los tipos disponibles no cumplen con los requisitos,
subclasifica uno de los tipos nativos y personalízalo, o construye un nuevo
tipo de contenedor utilizando una de las clases base abstractas definidas en
collections
como punto de partida.
- enum – Tipo de Enumeración
- collections — colecciones — Tipos de datos de contenedores
- array — Secuencia de datos de tipo fijo
- heapq — Algoritmo de ordenación de montículo
- bisect — Mantener listas en orden
- queue — Implementación FIFO segura para hilos
- struct — Estrutucturas binarias de datos
- weakref — Referencias no-permanentes a objetos
- copy — Duplicar Objectos
- pprint — Impresión bonita de estructuturas de datos