Qué es una tupla en Python: características, usos y diferencias

En este artículo
  1. Tupla y lista: la diferencia que importa
  2. Por qué usar algo que no se puede modificar
  3. Operaciones con tuplas
  4. El caso raro: la tupla de un solo elemento
  5. El matiz sobre la inmutabilidad
  6. Usos habituales
  7. Conversiones
  8. Preguntas frecuentes

Una tupla es una colección ordenada de elementos que no se puede modificar después de crearse. Es el equivalente inmutable de una lista.

coordenadas = (10, 20)
colores = ("rojo", "verde", "azul")
mixta = (1, "texto", True, 3.14)

Se escriben con paréntesis, aunque técnicamente lo que define una tupla son las comas, no los paréntesis. Esto funciona igual:

punto = 10, 20
print(type(punto))    # <class 'tuple'>

Tupla y lista: la diferencia que importa

TuplaLista
Sintaxis(1, 2, 3)[1, 2, 3]
¿Se puede modificar?NoSí
VelocidadAlgo más rápidaAlgo más lenta
MemoriaMenosMás
¿Sirve como clave de diccionario?SíNo
Métodos disponibles211
lista = [1, 2, 3]
lista[0] = 99        # ✅ funciona

tupla = (1, 2, 3)
tupla[0] = 99        # ❌ TypeError: 'tuple' object does not support item assignment

Por qué usar algo que no se puede modificar

La pregunta es razonable, y tiene cuatro respuestas concretas.

1. Comunica intención

Al usar una tupla, le dices a quien lea el código —incluido tú dentro de seis meses— que esos valores no deben cambiar. Es documentación implícita.

DIAS = ("lunes", "martes", "miércoles", "jueves", "viernes")
RGB_ROJO = (255, 0, 0)

2. Protege contra modificaciones accidentales

Si pasas una lista a una función, esa función puede modificarla sin que te enteres. Con una tupla, no puede.

3. Sirve como clave de diccionario

Esta es la razón más práctica. Las claves de un diccionario deben ser inmutables:

ubicaciones = {
    (40.4, -3.7): "Madrid",
    (19.4, -99.1): "Ciudad de México"
}

print(ubicaciones[(40.4, -3.7)])    # Madrid

# Con listas no funciona:
# {[40.4, -3.7]: "Madrid"}  → TypeError: unhashable type: 'list'

4. Es más eficiente

Ocupa menos memoria y se recorre algo más rápido. Con colecciones pequeñas no se nota, pero en estructuras grandes o en bucles muy repetidos, sí.

Operaciones con tuplas

Acceder a elementos

colores = ("rojo", "verde", "azul", "amarillo")

colores[0]        # 'rojo'      (los índices empiezan en 0)
colores[-1]       # 'amarillo'  (negativo: cuenta desde el final)
colores[1:3]      # ('verde', 'azul')
colores[:2]       # ('rojo', 'verde')

Desempaquetado

Es una de las cosas más elegantes de Python:

punto = (10, 20)
x, y = punto
print(x, y)       # 10 20

# Intercambiar valores sin variable auxiliar
a, b = 1, 2
a, b = b, a       # ahora a=2, b=1

Con el asterisco puedes recoger el resto en una lista:

numeros = (1, 2, 3, 4, 5)
primero, *resto = numeros
print(primero)    # 1
print(resto)      # [2, 3, 4, 5]

Los dos únicos métodos

t = (1, 2, 3, 2, 2)

t.count(2)        # 3  → cuántas veces aparece
t.index(3)        # 2  → en qué posición está

Solo hay dos porque los demás métodos de las listas modifican la colección, y aquí eso no es posible.

Funciones que sí funcionan

len(t)            # longitud
max(t), min(t)    # mayor y menor
sum(t)            # suma
sorted(t)         # devuelve una LISTA ordenada, no una tupla
3 in t            # True → comprobar pertenencia

El caso raro: la tupla de un solo elemento

Este detalle provoca errores difíciles de detectar:

no_es_tupla = (5)
print(type(no_es_tupla))    # <class 'int'>  → es solo un número entre paréntesis

si_es_tupla = (5,)
print(type(si_es_tupla))    # <class 'tuple'>

Hace falta la coma final. Sin ella, los paréntesis son simplemente agrupación matemática.

La tupla vacía sí funciona sin coma: ().

El matiz sobre la inmutabilidad

Una tupla no se puede modificar, pero si contiene objetos mutables, esos sí pueden cambiar:

t = (1, 2, [3, 4])

t[2].append(5)      # ✅ funciona
print(t)            # (1, 2, [3, 4, 5])

t[2] = [9]          # ❌ TypeError

La tupla garantiza que las referencias que contiene no cambian, no que el contenido de esas referencias sea inmutable. Por eso una tupla con una lista dentro tampoco sirve como clave de diccionario.

Usos habituales

Devolver varios valores de una función

def estadisticas(numeros):
    return min(numeros), max(numeros), sum(numeros)/len(numeros)

minimo, maximo, media = estadisticas([4, 8, 15, 16])

Cuando en Python "una función devuelve varios valores", en realidad devuelve una tupla.

Recorrer con índice

for i, color in enumerate(("rojo", "verde", "azul")):
    print(i, color)

Recorrer dos colecciones a la vez

nombres = ("Ana", "Luis")
edades = (25, 30)

for nombre, edad in zip(nombres, edades):
    print(f"{nombre} tiene {edad} años")

Tuplas con nombre

Cuando quieres la inmutabilidad pero acceder por nombre y no por posición:

from collections import namedtuple

Punto = namedtuple("Punto", ["x", "y"])
p = Punto(10, 20)

print(p.x)        # 10
print(p[0])       # 10 → también funciona por índice

Mucho más legible que p[0] y p[1] repartidos por el código.

Conversiones

lista = [1, 2, 3]
t = tuple(lista)       # (1, 2, 3)

t = (1, 2, 3)
lista = list(t)        # [1, 2, 3]

t = tuple("hola")      # ('h', 'o', 'l', 'a')

Si necesitas modificar una tupla, el camino es convertirla a lista, cambiarla y volver a convertirla. Aunque si haces eso a menudo, probablemente debería haber sido una lista desde el principio.

Preguntas frecuentes

¿Cuándo uso tupla y cuándo lista?
Tupla si los datos no van a cambiar o representan una unidad (una coordenada, un color RGB, un registro). Lista si vas a añadir, quitar o modificar elementos.

¿Se puede añadir un elemento a una tupla?
No se puede modificar, pero sí crear una nueva: t = t + (4,). Se genera otra tupla en memoria.

¿Existen tuplas en otros lenguajes?
Sí, con variantes: Python, C#, Swift, Rust y Kotlin las tienen. JavaScript no, aunque se simulan con arrays congelados.

¿Por qué (5) no es una tupla?
Porque los paréntesis sin coma son agrupación matemática. Hace falta la coma: (5,).


¿Aprendiendo Python? En nuestro catálogo de cursos técnicos tienes formación desde cero, con acceso inmediato y de por vida.