Buenas Prácticas de Colecciones
Reglas prácticas para elegir y usar los contenedores integrados de Python sin trampas de rendimiento ni deuda de legibilidad.
Busca en todas las páginas de la documentación
Reglas prácticas para elegir y usar los contenedores integrados de Python sin trampas de rendimiento ni deuda de legibilidad.
dict[str, int]) para contratos más claros.dict para búsqueda por clave, set para pertenencia, list para secuencias ordenadas. Documenta las opciones no obvias.deque para colas FIFO/LIFO en lugar de list.pop(0). O(1) frente a O(n) al principio.heapq para planificación de prioridad; bisect para inserciones ordenadas. No sorted() en cada inserción.Counter y defaultdict sobre el boilerplate manual de comprobación de existencia de clave. Menos ramas, intención más clara.dict o elementos de set. Usa tuple, frozenset o dataclass congelado.copy.deepcopy cuando se requiera independencia. dict.copy() comparte las listas internas.set como no especificado. Usa sorted(s) solo para visualización estable.dict {v: k}. Los valores que colisionan se sobrescriben silenciosamente.get o try/except KeyError intencionadamente. d[k] cuando la clave debe existir; get cuando es opcional.set una vez para pertenencia repetida en bucles. Evita in list O(n) en rutas críticas.sum/any/max para flujos grandes. Evita materializar listas de un millón de elementos.array.array o bytes para buffers numéricos/binarios compactos. No listas de enteros para protocolos de red.list por una estructura exótica. n pequeño favorece la simplicidad.keys() a menos que mutes durante la iteración. list(d) al eliminar mientras iteras.dict/set para transformaciones con filtros opcionales. Más claro que bucles manuales.dict[str, list[Event]], no dict solo. Estructuras auto-documentadas.NamedTuple o dataclass en lugar de indexación posicional de tuple para registros. row[3] oscurece el significado.| para superposiciones de configuración inmutables (3.9+). base | overrides se lee de izquierda a derecha.list(dict.fromkeys(items)). Línea única idiomática.dict/list/str/int/float/bool/None en los límites. Convierte set/tuple a list para JSON.dict para la igualdad semántica entre sistemas. Compara como mapeos, no como listas de claves.MappingProxyType o un objeto de configuración tipado.[] vs None. Los llamadores no deben adivinar entre ausente o vacío.Patrones LRU move_to_end. El dict normal maneja el orden de inserción en caso contrario.
tuple para pequeños paquetes fijos; list al devolver una colección homogénea de longitud variable.
__slots__ para millones de objetos pequeños de campos fijos. Prematuro para registros de aplicaciones típicas.
Counter añade operadores de multiconjunto y most_common - prefiere para trabajo de frecuencia.
Convierte a dict(defaultdict) antes de JSON - la fábrica no se serializa.
Sí para transformaciones de map/filter. Cambia a bucle para efectos secundarios o ramificaciones complejas.
dataclass/Pydantic para objetos de dominio con comportamiento; dict para pasar JSON o claves dinámicas.
Búsqueda de configuración en capas sin copiar - entorno sobre valores predeterminados. Aplana al persistir.
Cuando un conjunto de etiquetas debe ser una clave de dict o una entrada de caché - en caso contrario, set normal.
Búsqueda lineal en list dentro de un bucle - soluciona con índice de set/dict construido una vez.
Versiones de la pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.
Revisado por Chris St. John·Última actualización: 16 jul 2026