Consumo de memoria , borrar objetos y el módulo gc (garbage collector)

Cuando se trata del uso de variables, python hace un uso eficiente de la memoria. Esto quiere decir que a costa de que nuestro código se ejecute un poco más lento, se encarga de gestionar la memoria de forma mas eficiente rehusando valores, liberando memoria no usada, …

Para comprobarlo vamos a hacer uso de una función incorporada en built-in que se llama id(). Esta función muestra el identificador del objeto que le pasamos como argumento. Cada variable debería tener un identificador diferente pero en realidad no es así. En el siguiente código podemos observar como todas las variables excepto var_4 disponen del mismo identificador:

var_1 = 10
var_2 = var_1
var_3 = 10
var_4 = 11
var_5 = 10
print(id(var_1) , id(var_2) , id(var_3) , id(var_4) , id(var_5))

4415691744 4415691744 4415691744 4415691776 4415691744

Analizando el resultado, podemos llegar a la conclusión de que como las variables var_1, var_2, var_3 y var_5 disponen del mismo valor, python asigna el mismo identificador lo que quiere decir que consumen una cuarta parte de la memoria en comparación con otros lenguajes que no hacen este uso inteligente de memoria.

Podemos reutilizar las variables, pero y sí queremos borrarlas, ¿qué hacemos?.

Para borrar objetos disponemos del comando del , que se usa de la siguiente forma:

var_1 = 10
del var_1

El recolector de basura de python acabará liberando la memoria de los objetos borrados o no útiles, pero sí por alguna razón quisiéramos hacerlo nosotros manualmente, disponemos de un módulo llamado gc. Para usar este módulo primero debemos importarlo y posteriormente usar alguno de sus métodos como por ejemplo:

gc.get_stats() – nos muestra información sobre los objetos a los que les sigue la pista, recolectados, etc.

gc.enable() – habilita el recolector automático.

gc.disable() – deshabilita el recolector automático.

gc.isenabled() – nos dirá si está habilitado o deshabilitado el recolector de basura.

gc.collect() – sin argumentos fuerza la recolección de basura

gc.is_tracked(objeto) – muestra True o False para indicar si le está siguiendo la pista al objeto.

Así que vamos a cambiar el código anterior para borrar la variable y forzar la recolección de basura.

import gc
var_1 = 10
del var_1
gc.collect()

Un comentario en «Consumo de memoria , borrar objetos y el módulo gc (garbage collector)»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *