En Python, uno de los conceptos fundamentales que todo desarrollador debe entender es la diferencia entre objetos mutables e inmutables. Aunque puede parecer un detalle técnico menor, este concepto tiene un impacto directo en el comportamiento del código, el uso de memoria y la gestión de datos.
Para profesionales del mundo de datos, comprender esta diferencia es clave para evitar errores difíciles de detectar y optimizar procesos.
Qué es un objeto en Python
En Python, todo es un objeto. Esto incluye:
- números
- strings
- listas
- diccionarios
- funciones
Cada objeto tiene:
- un valor
- un tipo
- una identidad (dirección en memoria)
La diferencia entre mutable e inmutable depende de si el objeto puede modificarse después de su creación.
Objetos inmutables
Los objetos inmutables son aquellos cuyo valor no puede cambiar una vez creados.
Ejemplos comunes:
- int
- float
- string
- tuple
Ejemplo de objeto inmutable
x = 10
y = x
x = 20
print(x) # 20
print(y) # 10
En este caso, al modificar x, en realidad se crea un nuevo objeto en memoria. y sigue apuntando al valor original.
Strings como objetos inmutables
text = «hola»
text.upper()
print(text) # sigue siendo «hola»
El método upper() no modifica el string original, sino que devuelve uno nuevo.
Objetos mutables
Los objetos mutables sí pueden modificarse después de su creación.
Ejemplos comunes:
- list
- dict
- set
Ejemplo de objeto mutable
lista = [1, 2, 3]
otra_lista = lista
lista.append(4)
print(lista) # [1, 2, 3, 4]
print(otra_lista) # [1, 2, 3, 4]
En este caso, ambas variables apuntan al mismo objeto en memoria, por lo que el cambio afecta a ambas.
Diferencia clave: referencia vs copia
Una de las principales confusiones ocurre al trabajar con referencias.
Cuando asignamos una variable a otra:
- en objetos inmutables → se crea un nuevo objeto al modificar
- en objetos mutables → ambas variables pueden apuntar al mismo objeto
Copia superficial vs copia profunda
Para evitar problemas con objetos mutables, Python ofrece diferentes formas de copiar objetos.
Copia superficial (shallow copy)
import copy
lista = [[1, 2], [3, 4]]
copia = copy.copy(lista)
lista[0][0] = 99
print(copia) # también cambia
Copia profunda (deep copy)
import copy
lista = [[1, 2], [3, 4]]
copia = copy.deepcopy(lista)
lista[0][0] = 99
print(copia) # no cambia
Por qué esto es importante en data engineering
En proyectos de datos, trabajar con estructuras mutables es muy común.
Por ejemplo:
- listas de registros
- diccionarios JSON
- dataframes
Un mal manejo de objetos mutables puede provocar:
- errores en transformaciones
- cambios inesperados en datos
- bugs difíciles de detectar
Ejemplo práctico en pipelines
def add_value(data):
data.append(100)
return data
original = [1, 2, 3]
resultado = add_value(original)
print(original) # también cambia
Aquí el objeto original se modifica, lo que puede ser problemático en pipelines de datos.
Buenas prácticas
Para evitar problemas con mutabilidad:
- usar copias cuando sea necesario
- evitar modificar estructuras compartidas
- documentar funciones que modifican datos
- preferir estructuras inmutables cuando sea posible
Mutabilidad y rendimiento
Los objetos mutables suelen ser más eficientes cuando se necesitan modificaciones frecuentes, ya que evitan crear nuevos objetos constantemente.
Sin embargo, los objetos inmutables son más seguros en entornos donde se requiere consistencia de datos.
Cuándo usar cada uno
Objetos inmutables
- cuando se necesita seguridad y estabilidad
- cuando no se requieren cambios
Objetos mutables
- cuando se requiere modificar datos
- cuando se trabaja con grandes volúmenes de información
Conclusión
Comprender la diferencia entre objetos mutables e inmutables en Python es fundamental para escribir código correcto y eficiente. Este concepto impacta directamente en cómo se gestionan los datos, cómo se comportan las funciones y cómo se evita la aparición de errores en aplicaciones y pipelines de datos.
Para profesionales del mundo de datos, dominar este concepto no es opcional: es una base esencial para trabajar de forma segura y eficiente.




