Listas de Python: mutable vs inmutable

Clase 21 de 49Curso Práctico de Python: Creación de un CRUD

Resumen

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.

      Listas de Python: mutable vs inmutable