Las listas en Python son una de las estructuras de datos más usadas: permiten agrupar valores heterogéneos, modificar elementos y escribir código más legible. Aquí verás cómo inicializarlas, mutarlas, iterarlas y copiarlas sin efectos inesperados, con ejemplos claros y prácticos.
¿Qué son las listas en Python y por qué importan?
Las listas son una secuencia mutable que puede contener cualquier tipo de dato: enteros, strings, objetos o incluso otras listas. Al crear listas de listas, puedes construir matrices para representar datos en dos o más dimensiones. A diferencia de los strings, que son inmutables, las listas permiten cambiar sus elementos por índice, agregar o eliminar valores y recorrerlos con un for loop.
- Hacen el desarrollo más sofisticado, legible y fácil de implementar.
- Soportan tipos heterogéneos en una sola estructura.
- Se usan de forma constante durante la carrera como programador.
¿Qué diferencia a listas y strings como secuencias?
- Una lista puede mezclar tipos: números, textos y otras listas.
- Un string es inmutable: no permite asignación por índice.
- Una lista es mutable: puedes reasignar elementos por índice.
Ejemplos en Python:
# Inicialización literal con *square brackets*
countries = ["México", "Venezuela", "Colombia", "Argentina"]
ages = [12, 18, 24, 34, 50]
# Inicialización funcional con la *built in function* list()
empty = list()
# Lista heterogénea (receta): nombre y cantidades
receta = ["ensalada", 2, "lechugas", 5, "jitomates"]
# Mutabilidad: reasignación por índice
countries[0] = "Ecuador"
print(countries) # ["Ecuador", "Venezuela", "Colombia", "Argentina"]
# Inmutabilidad de string: esto lanza un TypeError
name = "David"
# name[0] = "d" # TypeError: los strings no permiten asignación por índice
¿Cómo se inicializan e iteran listas en Python?
Puedes crear listas de forma literal con [] o con list(). Una vez en memoria, las recorres con un for simple y legible. A diferencia de range, que produce un iterador, una lista ya contiene los valores en memoria.
# Literal vs funcional
nums_literal = [1, 2, 3]
nums_funcional = list((1, 2, 3)) # a partir de un iterable
# Iteración sobre una lista existente en memoria
for country in countries:
print(country)
# Comparación conceptual con range (range genera un iterador)
for n in range(5):
print(n)
- Inicialización literal: clara y directa.
- Inicialización funcional: útil al convertir otros iterables.
- For loop en listas: sintaxis concisa y legible.
¿Qué significa que las listas sean referenciales y cómo copiar sin efectos secundarios?
En Python, las listas son referenciales: almacenan referencias a los objetos en memoria, no los objetos en sí. Por eso, dos listas con los mismos valores son objetos distintos; su identidad en memoria difiere. Con strings iguales, la identidad puede coincidir según lo mostrado con la built in function ID.
¿Qué es un alias y por qué puede causar bugs?
Asignar una lista a otra variable crea un alias: ambas variables apuntan a la misma lista. Modificar una, modifica la otra.
countries = ["México", "Venezuela", "Colombia", "Argentina"]
global_countries = countries # alias: misma referencia
countries[0] = "Guatemala"
print(countries) # ["Guatemala", "Venezuela", "Colombia", "Argentina"]
print(global_countries) # También cambia: misma lista en memoria
- Alias: reasignación de la referencia, no copia de contenido.
- Efecto secundario: cambios inesperados en múltiples variables.
¿Cómo copiar una lista de forma segura con el módulo copy?
Para evitar efectos colaterales, usa el módulo copy y crea una copia nueva.
import copy
countries = ["México", "Venezuela", "Colombia", "Argentina"]
# Copia segura (nueva lista con los mismos valores)
global_countries = copy.copy(countries)
countries[0] = "Honduras"
print(countries) # ["Honduras", "Venezuela", "Colombia", "Argentina"]
print(global_countries) # ["México", "Venezuela", "Colombia", "Argentina"]
- Listas con mismos valores pueden vivir en direcciones distintas de memoria.
- Con alias, ambas variables comparten la misma lista.
- Con copy, cada variable mantiene su propia lista.
¿Te quedó alguna duda sobre mutabilidad, alias o el for loop en listas? Comparte tu pregunta y cuéntame qué casos prácticos quieres explorar.