4.2 Tuplas (tuple)
Una tupla es una colección ordenada e inmutable de elementos. A primera vista se parece mucho a una lista, pero con una diferencia fundamental: no se puede modificar después de crearla.
Esto significa que no se pueden añadir, eliminar ni cambiar sus elementos. Por esa razón, las tuplas se utilizan cuando se desea mantener los datos fijos y protegidos contra modificaciones accidentales.
Las tuplas son muy útiles, por ejemplo, para representar coordenadas, fechas, valores devueltos por una función o pares de datos constantes.
coordenadas = (40.7128, -74.0060)
print(coordenadas)
La variable coordenadas contiene una tupla con dos valores: la latitud y la longitud de Nueva York.
Aunque se pueden leer sus elementos, no se pueden cambiar.
1️⃣ Cómo crear una tupla
🟩 Usando paréntesis ()
La forma más común es escribir los elementos entre paréntesis y separados por comas.
numeros = (10, 20, 30)
print(numeros)
🟦 Empaquetado implícito
Python permite omitir los paréntesis si los valores están separados por comas.
colores = "rojo", "verde", "azul"
print(colores)
Aunque no haya paréntesis, Python entiende que es una tupla. Esto se llama empaquetado implícito (tuple packing).
🟨 Tupla de un solo elemento
Este caso tiene una pequeña trampa: Si escribimos solo un valor entre paréntesis, Python no lo interpreta como tupla, sino como el propio valor. Para que sea una tupla, hay que añadir una coma final.
t1 = (5)
t2 = (5,)
print(type(t1)) # <class 'int'>
print(type(t2)) # <class 'tuple'>
La coma es lo que realmente convierte la expresión en una tupla. Los paréntesis ayudan a la legibilidad, pero no son estrictamente necesarios.
🟧 Convertir otras estructuras en tuplas
Al igual que con las listas, podemos convertir un iterable (como una cadena o una lista) en una tupla usando la función tuple().
letras = tuple("Python")
print(letras)
# ('P', 'y', 't', 'h', 'o', 'n')
La cadena "Python" se descompone en una tupla donde cada carácter ocupa una posición.
2️⃣ Acceso a los elementos de una tupla
Las tuplas, como las listas, son ordenadas e indexadas, por lo que se puede acceder a sus elementos mediante el índice.
dias = ("lunes", "martes", "miércoles")
print(dias[0]) # lunes
print(dias[1]) # martes
Los índices comienzan en 0.
También se pueden usar índices negativos para contar desde el final:
print(dias[-1]) # miércoles
3️⃣ Inmutabilidad de las tuplas
La principal característica de las tuplas es que no se pueden modificar. Cualquier intento de cambiar su contenido produce un error.
numeros = (1, 2, 3)
numeros[0] = 99 # ❌ Error
# TypeError: 'tuple' object does not support item assignment
Una vez creada, la tupla queda fija. Si se necesita cambiar algo, debe crearse una nueva tupla a partir de la anterior.
4️⃣ Desempaquetado
Una de las características más prácticas de las tuplas es que se pueden desempaquetar, es decir, asignar sus valores a varias variables en una sola línea.
Todas las técnicas de desempaquetado se pueden emplear también con Listas.
punto = (4, 5)
x, y = punto
print(f"x = {x}, y = {y}")
# x = 4, y = 5
Cada elemento de la tupla se asigna automáticamente a una variable distinta. Esto se conoce como desempaquetado múltiple.
🟩 Desempaquetado con *
Cuando no se sabe cuántos elementos tendrá la tupla, se puede usar el operador * para agrupar los valores restantes.
valores = (1, 2, 3, 4, 5)
primero, *intermedios, ultimo = valores
print(primero) # 1
print(intermedios) # [2, 3, 4]
print(ultimo) # 5
*intermedios agrupa los elementos del medio en una lista.
Esto ofrece gran flexibilidad en asignaciones.
5️⃣ Operaciones con tuplas
Aunque las tuplas son inmutables, sí permiten ciertas operaciones comunes:
| Operación | Descripción | Ejemplo | Resultado |
|---|---|---|---|
len(t) | Longitud | len((1,2,3)) | 3 |
+ | Concatenar | (1,2) + (3,4) | (1,2,3,4) |
* | Repetir | (1,2) * 2 | (1,2,1,2) |
in | Comprobar existencia | 2 in (1,2,3) | True |
max(t) | Máximo | max((5,8,3)) | 8 |
min(t) | Mínimo | min((5,8,3)) | 3 |
sum(t) | Suma (si hay números) | sum((1,2,3)) | 6 |
Estas funciones integradas no modifican la tupla, crean y devuelven nuevos valores.