Skip to main content

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.