Las tuplas en Python son colecciones ordenadas que no pueden modificarse después de su creación. Se parecen a las listas, pero su inmutabilidad las hace útiles para coordenadas, configuraciones fijas, claves de diccionarios, registros pequeños y funciones que devuelven varios resultados.
Esta guía explica cómo crear tuplas, acceder a elementos, utilizar slicing, desempaquetar valores, recorrer registros y decidir cuándo una tupla resulta más apropiada que una lista.
Qué es una tupla
Una tupla almacena una secuencia ordenada de valores. Puede contener números, texto, objetos o tipos mezclados:
point = (10, 25)
person = ("Amelia", 31, "Designer")
mixed = (1, "Python", True, 3.14)Las tuplas conservan el orden y permiten duplicados. A diferencia de las listas, no admiten asignación, inserción ni eliminación de elementos.
La comparación entre listas, tuplas, sets y diccionarios ayuda a seleccionar la colección correcta.
Crear una tupla
Los paréntesis son habituales, pero la coma es la que crea la tupla:
colors = ("red", "green", "blue")
coordinates = 12.5, 8.2
print(type(colors))
print(type(coordinates))Una tupla vacía se crea con paréntesis:
empty = ()Una tupla con un único elemento necesita una coma final:
not_a_tuple = (5)
one_item_tuple = (5,)
print(type(not_a_tuple))
print(type(one_item_tuple))La ausencia de esa coma es uno de los errores más frecuentes entre principiantes.
Utilizar tuple()
El constructor tuple() convierte otro iterable:
letters = tuple("Python")
numbers = tuple([1, 2, 3, 4])
print(letters)
print(numbers)La documentación oficial de tuple describe su construcción y comportamiento como secuencia.
Índices y slicing
Las tuplas utilizan índices desde cero:
languages = ("Python", "JavaScript", "Go", "Rust")
print(languages[0])
print(languages[-1])El slicing devuelve una tupla nueva:
print(languages[1:3])
print(languages[::-1])Los mismos principios se aplican a cadenas y listas. La guía de slicing en Python explica inicio, fin, paso e índices negativos.
Inmutabilidad
Después de crear una tupla, sus referencias no pueden reemplazarse:
settings = ("dark", "es", 20)
# settings[0] = "light" # TypeErrorLa inmutabilidad comunica que la colección representa un registro fijo. También permite que una tupla sea hashable cuando todos sus elementos son hashables:
locations = {
(0, 0): "origin",
(10, 5): "checkpoint",
}
print(locations[(10, 5)])La guía de diccionarios en Python explica por qué las claves deben ser estables.
Objetos mutables dentro de una tupla
La tupla puede contener una lista u otro objeto mutable:
record = ("tasks", ["write", "review"])
record[1].append("publish")
print(record)La referencia almacenada por la tupla no cambió, pero la lista sí. Por eso se dice que la inmutabilidad es superficial.
Empaquetado y desempaquetado
Crear una tupla también se conoce como empaquetar:
employee = "Jordan", "Engineering", 72000Desempaquetar asigna cada posición a una variable:
name, department, salary = employee
print(name)
print(department)
print(salary)El número de variables debe coincidir normalmente con la cantidad de elementos.
Desempaquetado extendido
Un asterisco recoge valores intermedios en una lista:
first, *middle, last = (10, 20, 30, 40, 50)
print(first)
print(middle)
print(last)Este patrón es útil cuando el primer o último dato tiene un significado especial.
Intercambiar variables
left = "A"
right = "B"
left, right = right, left
print(left, right)Python evalúa primero la parte derecha, empaqueta los valores y después los distribuye entre las variables.
Devolver varios valores
Una función puede devolver varios resultados, que Python empaqueta como tupla:
def calculate_stats(numbers):
minimum = min(numbers)
maximum = max(numbers)
average = sum(numbers) / len(numbers)
return minimum, maximum, average
lowest, highest, mean = calculate_stats([7, 4, 9, 6])
print(lowest, highest, mean)La guía de funciones en Python explica retornos, parámetros y validación.
Métodos disponibles
Las tuplas poseen dos métodos principales:
count(value)cuenta ocurrencias;index(value)devuelve la primera posición.
statuses = ("open", "closed", "open", "pending")
print(statuses.count("open"))
print(statuses.index("pending"))index() genera ValueError si el elemento no existe. Cuando la ausencia sea normal, comprueba primero con in.
Recorrer tuplas
dimensions = (1920, 1080, 60)
for value in dimensions:
print(value)Cuando se necesita la posición:
for index, value in enumerate(dimensions):
print(index, value)La guía de bucles for en Python explica cómo recorrer secuencias, diccionarios y archivos.
Tuplas anidadas
grid = (
(1, 2, 3),
(4, 5, 6),
(7, 8, 9),
)
print(grid[1][2])Las tuplas anidadas pueden representar matrices pequeñas, coordenadas, colores RGB o posiciones de un tablero. Para cálculo numérico intensivo, NumPy suele resultar más conveniente.
Tupla frente a lista
Utiliza una tupla cuando el número y el significado de los elementos sean estables. Utiliza una lista cuando debas añadir, eliminar, reemplazar o reordenar elementos:
location = (51.5074, -0.1278)
visited_cities = ["London", "Paris"]
visited_cities.append("Berlin")La elección debe expresar el comportamiento esperado de los datos, no una microoptimización.
Tuplas como registros
Una tupla funciona bien para registros pequeños con posiciones conocidas:
records = (
(101, "Ava", "active"),
(102, "Noah", "inactive"),
(103, "Mia", "active"),
)
active_users = []
for user_id, name, status in records:
if status == "active":
active_users.append((user_id, name))
print(active_users)El desempaquetado da nombres a las posiciones y mejora la lectura.
NamedTuple y alternativas
Cuando recordar posiciones se vuelve difícil, utiliza NamedTuple:
from typing import NamedTuple
class Point(NamedTuple):
x: float
y: float
point = Point(10.5, 4.2)
print(point.x)Una estructura con nombres conserva muchas propiedades de la tupla. Para datos que necesitan métodos, validación o campos opcionales, una dataclass puede ser mejor.
Ejemplo: colores RGB
COLORS = {
"red": (255, 0, 0),
"green": (0, 255, 0),
"blue": (0, 0, 255),
}
def describe_color(name):
red, green, blue = COLORS[name]
return f"R={red}, G={green}, B={blue}"
print(describe_color("blue"))Cada color es un registro fijo de tres valores, por lo que una tupla expresa bien su intención.
Errores frecuentes
- Olvidar la coma de una tupla con un elemento.
- Intentar modificar una posición.
- Usar posiciones numéricas poco claras en registros complejos.
- Suponer que un objeto mutable anidado no puede cambiar.
- Desempaquetar en una cantidad incorrecta de variables.
- Elegir una tupla para una colección que debe crecer.
Referencia adicional
La guía oficial de tuplas y secuencias describe el empaquetado y desempaquetado.
Conclusión
Las tuplas ofrecen colecciones ordenadas e inmutables con una sintaxis de desempaquetado muy práctica. Son adecuadas para coordenadas, configuraciones fijas, múltiples retornos, claves de diccionarios y registros pequeños. Cuando las posiciones pierdan claridad, cambia a un registro con nombres.






