Tuplas
Las tuplas son la versión inmutable de las listas. Una vez creadas, no podés modificar sus elementos. Esa restricción, lejos de ser una limitación, es su mayor fortaleza: garantizan que ciertos datos no cambien accidentalmente.
Concepto teórico
¿Qué es una tupla?
Una tupla es una colección ordenada e inmutable de elementos. Se crea con
paréntesis () o simplemente separando valores con comas. La diferencia fundamental con las listas
es que, una vez creada, no podés agregar, eliminar ni modificar sus elementos. Si intentás
hacerlo, Python lanza un TypeError.
coordenadas = (34.6037, 58.3816) # tupla con paréntesis punto = 34.6037, 58.3816 # también válido (sin paréntesis) singleton = (42,) # tupla de UN elemento (la coma es obligatoria) no_es_tupla = (42) # esto es solo el int 42 entre paréntesis vacia = () # tupla vacía
(42) NO es una tupla —
es el número 42 entre paréntesis (como en matemáticas). Para una tupla de un elemento necesitás la coma:
(42,). Esto confunde al 100% de los principiantes al menos una vez.
¿Por qué usar algo que no se puede modificar?
La inmutabilidad parece una limitación, pero en realidad te da tres ventajas enormes:
- Seguridad: si tenés datos que NO deben cambiar (coordenadas geográficas, constantes de configuración, un registro de base de datos), la tupla garantiza que nadie los modifique por error. Una lista puede ser mutada por cualquier función que la reciba como argumento.
- Rendimiento: las tuplas son más rápidas que las listas porque Python las optimiza internamente. Para datos estáticos, siempre preferí tuplas.
- Hashability: las tuplas pueden usarse como claves de diccionario y como elementos de sets. Las listas no, precisamente porque son mutables. Esto es fundamental para ciertos patrones de datos.
Packing y unpacking
Packing es cuando Python empaqueta varios valores en una tupla automáticamente:
datos = "García", 35, "Buenos Aires" → Python crea la tupla
("García", 35, "Buenos Aires")
Unpacking es lo contrario: extraer los valores de una tupla a variables individuales:
nombre, edad, ciudad = datos → nombre = "García", edad = 35,
ciudad = "Buenos Aires"
El unpacking es increíblemente versátil:
- Parcial con *:
primero, *resto = (1, 2, 3, 4, 5)→primero = 1,resto = [2, 3, 4, 5] - Ignorar con _:
nombre, _, ciudad = datos→ la edad se descarta - Swap de variables:
a, b = b, aes en realidad packing + unpacking de tuplas - Retorno múltiple de funciones:
return total, promediodevuelve una tupla que podés desempaquetar
return a, b, en
realidad devuelve (a, b) — una tupla. Cuando hacés x, y = funcion(), estás
desempaquetando esa tupla. Este patrón es ubicuo en Python profesional.namedtuple: tuplas con nombres
Las tuplas normales acceden a elementos por posición (datos[0], datos[1]), lo cual es
poco legible. namedtuple del módulo collections te permite dar nombres a cada
posición, combinando la inmutabilidad de las tuplas con la legibilidad de los diccionarios:
from collections import namedtuple
Cliente = namedtuple("Cliente", ["nombre", "edad", "score"])
c = Cliente("García", 35, 720)
print(c.nombre) # "García" — acceso por nombre, mucho más claro que c[0]
print(c.score) # 720
DataFrame.shape devuelve una tupla (filas, columnas).
DataFrame.iterrows() devuelve tuplas (índice, fila). .groupby().agg() con
multi-index devuelve tuplas como claves. Si dominás tuplas, pandas se entiende mejor.
Cuándo usar tupla vs lista
| Usá tupla cuando… | Usá lista cuando… |
|---|---|
| Los datos no deben cambiar | Necesitás agregar/eliminar elementos |
| Representás un "registro" fijo (nombre, edad, score) | Representás una colección que crece/decrece |
| Necesitás usarla como clave de diccionario | Necesitás ordenar in-place |
| Devolvés múltiples valores de una función | Procesás datos iterativamente |
| Querés rendimiento en datos estáticos | El tamaño varía durante ejecución |
Ejemplos explicados paso a paso
Ejemplo 1: Crear tuplas y verificar inmutabilidad
Creamos tuplas de distintas formas y demostramos que no se pueden modificar.
Hacé clic en ▶ Ejecutar
Ejemplo 2: Packing, unpacking y swap
El unpacking de tuplas es una de las herramientas más elegantes de Python. La usás constantemente sin darte cuenta.
Hacé clic en ▶ Ejecutar
Ejemplo 3: Tuplas como registros de datos
Las tuplas son perfectas para representar registros fijos donde cada posición tiene un significado.
Hacé clic en ▶ Ejecutar
Ejemplo 4: namedtuple — tuplas legibles
Cuando cliente[2] no te dice nada, cliente.score se explica solo.
Hacé clic en ▶ Ejecutar
Ejemplo 5: Tuplas como claves de diccionario y en operaciones
Algo que las listas NO pueden hacer: ser claves de diccionario. Las tuplas sí, porque son inmutables (hashables).
Hacé clic en ▶ Ejecutar
Referencia rápida
| Operación | Sintaxis | Resultado |
|---|---|---|
| Crear | (1, 2, 3) o 1, 2, 3 |
Tupla |
| Singleton | (42,) ← coma obligatoria |
Tupla de 1 elem |
| Desde lista | tuple([1,2,3]) |
(1, 2, 3) |
| Acceso | t[0], t[-1] |
Elemento |
| Slicing | t[1:3] |
Nueva tupla |
| Unpacking | a, b, c = t |
Variables |
| Parcial | a, *rest = t |
var + lista |
| Concatenar | t1 + t2 |
Nueva tupla |
| Repetir | t * 3 |
Nueva tupla |
| Pertenencia | x in t |
True/False |
| Contar | t.count(x) |
int |
| Buscar | t.index(x) |
int |
Ejercicios
Ejercicio 1: Crear y acceder
Creá una tupla moneda con los valores ("Peso argentino", "ARS", 1). Imprimí cada
elemento por nombre descriptivo. Debe incluir ARS.
Hacé clic en ▶ Ejecutar
Ejercicio 2: Singleton y verificación de tipo
Creá una tupla de un solo elemento (42,) y otra sin coma (42). Imprimí el tipo de
cada una para demostrar la diferencia. Debe incluir int.
Hacé clic en ▶ Ejecutar
Ejercicio 3: Unpacking básico
Dada persona = ("Fernández", 30, "Mendoza"), desempaquetá en nombre,
edad, ciudad e imprimí con f-string. Debe incluir Mendoza.
Hacé clic en ▶ Ejecutar
Ejercicio 4: Función con retorno múltiple
Creá una función estadisticas(numeros) que devuelva una tupla con
(minimo, maximo, promedio). Probala con [45000, 72000, 38000, 91000]. Debe incluir
61500.
Hacé clic en ▶ Ejecutar
Ejercicio 5: Unpacking parcial con *
Dada ranking = ("Pérez", "García", "López", "Martínez", "Sosa"), usá unpacking para extraer el
primero, el último, y el resto en una variable medio. Imprimí los tres. Debe incluir
Pérez.
Hacé clic en ▶ Ejecutar
Ejercicio 6: Ordenar lista de tuplas
Dada esta lista de tuplas (nombre, saldo), ordenalas por saldo descendente e imprimí el ranking. Debe incluir
890000.
Hacé clic en ▶ Ejecutar
Ejercicio 7: Tuplas como claves de diccionario
Creá un diccionario precios donde las claves sean tuplas (producto, tamaño) y los
valores sean precios. Consultá el precio de ("Café", "Grande"). Debe incluir 2800.
Hacé clic en ▶ Ejecutar
Ejercicio 8: namedtuple para datos de clientes
Creá un namedtuple llamado Cuenta con campos titular,
tipo, saldo. Creá 3 cuentas y calculá el saldo total. Debe incluir
Total:.
Hacé clic en ▶ Ejecutar
Ejercicio 9: Enumerate con unpacking
Dada una lista de tuplas
operaciones = [("Compra", 15000), ("Venta", 8000), ("Compra", 22000), ("Venta", 5000)], recorrela
con enumerate y unpacking para imprimir cada operación numerada. Calculá el balance final
(compras positivas, ventas negativas). Debe incluir Balance: 24000.
Hacé clic en ▶ Ejecutar
Ejercicio 10: Sistema de cotizaciones de monedas
Tenés cotizaciones como tuplas (moneda, compra, venta). Creá una lista con al menos 4
cotizaciones (USD oficial, USD MEP, EUR, BRL). Convertí USD 1000 a pesos con la cotización de venta del dólar
MEP. Imprimí una tabla formateada con todas las cotizaciones y la brecha porcentual compra-venta. Debe incluir
Brecha.
Hacé clic en ▶ Ejecutar
Resumen y conexión
- Las tuplas son colecciones ordenadas e inmutables. Se crean con
()o solo comas. - Una tupla de un elemento necesita coma:
(42,), no(42). - Packing (
a, b = 1, 2) y unpacking (x, y = tupla) son herramientas fundamentales. - Las funciones que devuelven
return a, bestán devolviendo tuplas. - Las tuplas pueden ser claves de diccionario (las listas no).
namedtuplecombina la inmutabilidad de las tuplas con la legibilidad del acceso por nombre.- Usá tupla para datos fijos, lista para datos que cambian.
En la siguiente lección (10 · Diccionarios) vas a aprender la estructura de datos más importante para análisis: pares clave-valor que te permiten representar registros completos de datos.
Recursos: Python docs — Tuples · collections.namedtuple