Tuplas en Python: cuándo y por qué usar secuencias inmutables
Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción
Piensa en unas coordenadas GPS. Una ubicación como (40.7128, -74.0060) representa la ciudad de Nueva York. Si cambiaras uno de esos números por accidente, la ubicación apuntaría a un lugar completamente distinto. Hay datos que no deberían cambiar una vez creados.
Con las fechas pasa lo mismo. El 1 de enero de 2025 es un hecho fijo. No querrías que tu código cambiara esa fecha por accidente al 37 de febrero. Cuando los datos tienen que quedarse fijos, Python te ofrece las tuplas.
Una tupla se parece muchísimo a una lista, pero con una diferencia clave: una vez que creas una tupla, no puedes cambiarla. No puedes añadir, quitar ni sustituir elementos. En esta lección verás por qué esa limitación es en realidad un superpoder.
Cómo crear tuplas en Python
Para crear una tupla, escribe los elementos entre paréntesis (), separados por comas. También puedes crear una tupla sin paréntesis: lo que de verdad la convierte en tupla son las comas.
(40.7128, -74.006)
('red', 'green', 'blue')
(42,)
<class 'tuple'><class 'int'> <class 'tuple'> () 0
También puedes convertir otras secuencias en tuplas con el constructor tuple(). Es práctico cuando tienes una lista y quieres congelarla para que nadie pueda modificarla.
('apple', 'banana', 'cherry')
('h', 'e', 'l', 'l', 'o')Acceder a los elementos de una tupla y sacar porciones
Acceder a los elementos de una tupla funciona exactamente igual que con las listas. Usas corchetes con un número de índice. Los índices positivos cuentan desde el principio y los negativos, desde el final.
Jan Apr Jun May 6
Las porciones (slicing) también funcionan igual. Puedes tomar una parte de una tupla con tuple[start:end]. El resultado es una tupla nueva.
('Feb', 'Mar', 'Apr')
('Jan', 'Feb', 'Mar')
('May', 'Jun')
('Jan', 'Mar', 'May')Pero aquí es donde las tuplas se diferencian de las listas. Si intentas cambiar un elemento, Python lanzará un TypeError. Las tuplas son inmutables: no se pueden modificar después de crearlas.
red
Empaquetar y desempaquetar tuplas
Empaquetar (packing) es crear una tupla asignando varios valores a una sola variable. Desempaquetar (unpacking) es lo contrario: sacar los valores de una tupla y guardarlos en variables separadas. El desempaquetado es una de las características más útiles de Python.
('Alice', 25, 'Engineer')
Alice
25
EngineerEl número de variables de la izquierda tiene que coincidir con el número de elementos de la tupla. Si no coinciden, Python lanza un ValueError.
Un uso clásico del desempaquetado es intercambiar dos variables sin necesidad de una variable temporal. La mayoría de los demás lenguajes necesitan tres líneas para esto; Python lo hace en una.
Before: a=10, b=20 After: a=20, b=10
Al desempaquetar, también puedes usar un asterisco * para capturar los elementos sobrantes. Esto se llama desempaquetado extendido (extended unpacking) y te da una lista con los elementos restantes.
95 [87, 72, 68] 91
Alice scored 95 Bob scored 87 Charlie scored 72
Tuplas frente a listas: cuándo usar cada una
Si las tuplas son solo listas que no se pueden cambiar, ¿para qué molestarse con ellas? Hay tres buenas razones: seguridad, rendimiento y claridad.
Seguridad: cuando los datos no deberían cambiar, una tupla evita modificaciones accidentales. Coordenadas GPS, valores de color RGB, registros de una base de datos: son datos fijos. Una tupla deja clara tu intención.
Rendimiento: las tuplas son un poco más rápidas que las listas y usan menos memoria. En colecciones pequeñas apenas se nota, pero con millones de registros la diferencia se acumula.
Claves de diccionario: las tuplas se pueden usar como claves de un diccionario porque son inmutables. Las listas no. Esto será importante cuando aprendas sobre los diccionarios.
# Data that changes over time
shopping = ['milk', 'eggs']
shopping.append('bread')
# Collections you sort or filter
scores = [85, 92, 78]
scores.sort()# Fixed data that shouldn't change
coords = (40.7128, -74.0060)
rgb_red = (255, 0, 0)
# Returning multiple values
def get_name_age():
return 'Alice', 25Por dentro: por qué las tuplas son más rápidas que las listas
Como las tuplas son inmutables, Python puede aplicar optimizaciones internas. El tamaño de una tupla queda fijo al crearla, así que Python no necesita reservar memoria extra por si crece, como hace con las listas.
List size: 52 bytes Tuple size: 40 bytes
Las tuplas también admiten todas las operaciones que no modifican la secuencia. Puedes usar count() para contar cuántas veces aparece un valor, index() para encontrar su posición, in para comprobar si un elemento está en la tupla y + para concatenar.
3 2 True (1, 2, 3, 4)
Ejercicios de práctica
¡Hora de practicar! Estos ejercicios cubren la creación de tuplas, el desempaquetado y la inmutabilidad.
Crea una tupla llamada seasons que contenga las cuatro estaciones como cadenas: 'Spring', 'Summer', 'Fall', 'Winter'.
Después, imprime la primera y la última estación, cada una en su propia línea.
Salida esperada:
Spring
WinterLee este código con atención. ¿Qué va a imprimir? Piensa en qué hace que algo sea una tupla y no solo un número entre paréntesis.
Escribe la salida exacta.
Tienes una tupla que representa el registro de un estudiante. Desempaquétala en tres variables: name, age y grade.
Después, imprime cada variable en su propia línea.
Salida esperada:
Emma
16
AEste código intenta cambiar un color de una tupla, pero las tuplas son inmutables. Corrígelo para que el programa imprima los colores actualizados sin cambiar la tupla original. En su lugar, crea una tupla nueva.
Salida esperada:
('red', 'yellow', 'blue')Tienes una lista de tuplas en la que cada tupla contiene el nombre de un estudiante y su nota. Recorre la lista, desempaqueta cada tupla e imprime el resultado de cada estudiante con este formato:
Alice: 92
Bob: 85
Charlie: 78Resumen: lo que aprendiste sobre las tuplas en Python
Este es un repaso de todo lo que ya sabes sobre las tuplas:
| Concepto | Qué hace | Ejemplo |
|---|---|---|
| Crear una tupla | Guarda elementos fijos | point = (3, 4) |
| Coma final | Crea una tupla de un solo elemento | solo = (42,) |
| Indexación | Accede por posición | point[0], point[-1] |
| Porciones (slicing) | Obtiene una parte | months[1:4] |
| Desempaquetado | Extrae los valores en variables | x, y = point |
| Desempaquetado extendido | Captura los sobrantes con * | first, *rest = items |
count() | Cuenta las apariciones | t.count(2) |
index() | Encuentra la posición | t.index(3) |
| Inmutabilidad | No se puede modificar tras crearla | Lanza TypeError |
Las tuplas son perfectas para colecciones fijas de datos: coordenadas, colores, registros y valores de retorno de funciones. Su inmutabilidad hace que tu código sea más seguro y tus intenciones, más claras.
¿Qué sigue?
En la siguiente lección, [Diccionarios en Python](/python/python-dictionaries), aprenderás a guardar datos como pares clave-valor. En lugar de acceder a los elementos por su posición, accederás a ellos por su nombre.
Los diccionarios son una de las estructuras de datos más potentes de Python. Junto con las listas y las tuplas, te permiten representar casi cualquier dato del mundo real.