Repaso
English
PythonAvanzadoPY-17

Dos objetos se referencian entre sí y nada más los referencia. ¿Qué los libera en CPython?

Opciones

  1. El reference counting los libera de inmediato, ya que nadie los usa
  2. El garbage collector de ciclos, del módulo gc, los encuentra y los libera (Opción correcta)
  3. Nada los libera, así que siguen en memoria hasta que termina el programa
  4. El sistema operativo los recupera cuando termina el thread

Respuesta

El garbage collector de ciclos (módulo gc)

Por qué

CPython libera memoria principalmente con reference counting: cada objeto cuenta cuántas referencias apuntan a él, y cuando la cuenta llega a 0 se elimina al instante.

En un ciclo (A apunta a B y B apunta a A) las cuentas nunca llegan a 0, aunque el resto del programa ya no los use.

Un segundo mecanismo, el garbage collector de ciclos, se ejecuta de vez en cuando, encuentra esos grupos inalcanzables y los libera.

Recuerda

El reference counting libera casi todos los objetos; el gc limpia los ciclos.

Términos clave

Practica esta pregunta en Repaso