30. Automatic Reference Counting
Este desafío busca simular el concepto de "Automatic Reference Counting" (ARC) que se utiliza en lenguajes como Swift u Objective-C para la gestión de memoria. No se trata de liberar memoria real, sino de un ejercicio conceptual.
Crea un sistema simple donde los "objetos" tienen un contador de referencias. Cuando un objeto es referenciado, su contador aumenta. Cuando una referencia se elimina, el contador disminuye. Cuando el contador llega a cero, el objeto puede considerarse "liberado".
class ObjetoConARC:
def __init__(self, identificador: str):
self.identificador = identificador
self._ref_count = 0
print(f"Objeto {self.identificador} creado.")
def __repr__(self):
return f"<Objeto {self.identificador} (Refs: {self._ref_count})>"
# Métodos a implementar
def retener(self):
# Aumentar contador de referencias
pass
def liberar(self):
# Disminuir contador de referencias. Si llega a 0, "liberar" el objeto.
pass
# Ejemplo de uso conceptual
# obj1 = ObjetoConARC("A")
# obj1.retener() # ref_count = 1
# obj2 = obj1 # Esto en Python es otra referencia, no necesitas "retener" de nuevo
# obj1.retener() # ref_count = 2
# obj1.liberar() # ref_count = 1
# obj2.liberar() # ref_count = 0, Objeto "A" liberado
Ratoncito
Implementa los métodos retener y liberar para manipular el contador de referencias. Cuando el contador llega a cero, imprime un mensaje indicando que el objeto ha sido "liberado". Considera que la clase ObjetoConARC no puede tener variables mutables (excepto el contador en este caso, que se maneja internamente).
Dragón
Introduce el concepto de "referencias cíclicas". Modifica tu sistema para detectar o prevenir referencias cíclicas que podrían causar fugas de memoria (objetos que nunca llegan a 0 referencias porque se referencian mutuamente). Esto es un problema complejo en ARC real; puedes simular una detección simple o explicar cómo se abordaría.
Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.
Apóyame en Ko-fi