Dos objetos se referencian entre sí y nada más los referencia. ¿Qué los libera en CPython?
Opciones
- El reference counting los libera de inmediato, ya que nadie los usa
- El garbage collector de ciclos, del módulo
gc, los encuentra y los libera (Opción correcta) - Nada los libera, así que siguen en memoria hasta que termina el programa
- 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.