Curso de Python / Entender las tuplas y el desempaquetado de secuencias
Una tupla es una secuencia ordenada cuyas referencias a elementos no pueden sustituirse. Resulta útil para registros breves y valores de retorno múltiples, pero los objetos mutables que contenga pueden seguir cambiando.
Crear una tupla y comprender su inmutabilidad
La coma es la que forma la tupla; los paréntesis ayudan a expresar la agrupación. Para crear una tupla de un solo elemento necesitas una coma final: (3500,). En cambio, (3500) es una expresión que produce un entero.
single = (3500,)
record = ("lunch", 8000)
print(type(single).__name__)
print(record[0])
La primera línea de salida muestra tuple y la segunda lunch. El índice cero accede al primer elemento, igual que en otras secuencias. Esta comprobación distingue la tupla de un solo elemento de un número rodeado de paréntesis.
La inmutabilidad se refiere a las posiciones de la tupla. Con pair = ([1], 2), la asignación pair[0] = [] falla; sin embargo, pair[0].append(3) modifica la lista que contiene y deja ([1, 3], 2). El contenedor exterior sigue sin permitir sustituir sus elementos.
Ejecutar el desempaquetado de una secuencia
Guarda el siguiente programa como tuples.py, en UTF-8. Ejecútalo con python tuples.py desde la carpeta de práctica y el entorno del proyecto seleccionado. En macOS o Ubuntu, utiliza python3 fuera del entorno si corresponde a tu instalación.
record = ("lunch", 8000, "food")
name, amount, category = record
print(name, amount, category)
first, *rest = [3500, 8000, 2500]
print(first, rest)
a, b = 1, 2
a, b = b, a
print(a, b)
La salida esperada muestra la distribución de los campos, el resto reunido en una lista y el intercambio de dos valores:
lunch 8000 food
3500 [8000, 2500]
2 1
En name, amount, category = record, cada elemento se asigna a un nombre. La expresión de la derecha se evalúa antes de efectuar las asignaciones, por lo que a, b = b, a permite intercambiar los valores.
Ajustar el número y el significado de los campos
Si utilizas nombres sin asterisco, la cantidad de elementos debe coincidir con la cantidad de destinos. Una diferencia provoca ValueError. Un destino como *rest recoge los elementos restantes en una lista; solo puede existir uno en una misma asignación de desempaquetado.
Al recorrer directamente un diccionario obtienes sus claves. Para distribuir claves y valores en dos nombres utiliza items(), como se explica en el uso de diccionarios. Los datos procedentes de un archivo o de una red pueden tener registros incompletos: comprueba su forma antes de asumir que todos tienen los mismos campos.
La documentación oficial de tuplas y secuencias desarrolla estas reglas.
Elegir entre tuplas, listas y campos con nombre
| Necesidad | Estructura apropiada |
|---|---|
| Una secuencia de importes que crece | Lista |
| Un registro breve con posiciones conocidas | Tupla |
| Campos identificados por nombres expresivos | Diccionario o dataclass |
Una tupla solo puede ser clave de un diccionario cuando todos sus elementos son hashables, es decir, cumplen el contrato necesario para utilizarse como claves. Una tupla que contiene una lista no lo es. Que el contenedor exterior sea inmutable no hace que todos los datos interiores sirvan como clave.
Quita la categoría del registro del ejemplo para observar el fallo de desempaquetado. Ajusta después la cantidad de nombres y finalmente restaura el registro original. Si cuesta recordar qué significa cada posición, los campos con nombre pueden expresar mejor el modelo de datos.




