¿Cómo eliminar todas las referencias de un objeto en Python?

Supongamos que tienes algo como:

x = "something" b = x l = [b] 

¿Cómo se puede eliminar el objeto con solo una referencia, por ejemplo, x?

del x no hará el truco; el objeto todavía es accesible desde b, por ejemplo.

No no no. Python tiene un recolector de basura que tiene problemas de territorio muy fuertes: no se mete con usted creando objetos, no se mete con él borrando objetos.

En pocas palabras, no se puede hacer, y por una buena razón.

Si, por ejemplo, su necesidad proviene de casos, por ejemplo, de algoritmos de almacenamiento en caché que conservan las referencias, pero que no deben evitar que se recopilen datos una vez que nadie los esté utilizando, es posible que desee echar un vistazo a weakref .

La única solución que veo ahora es que debes asegurarte de mantener la única referencia a x , todos los demás no deben obtener x , sino una referencia débil que apunta a x . Las referencias débiles se implementan en el módulo weakref y puede usarlo de esta manera:

 >>> import weakref >>> class TestClass(object): ... def bark(self): ... print "woof!" ... def __del__(self): ... print "destructor called" ... >>> x = TestClass() >>> b = weakref.proxy(x) >>> b  >>> b.bark() woof! >>> del x destructor called >>> b.bark() Traceback (most recent call last): File "", line 1, in  ReferenceError: weakly-referenced object no longer exists 

Sin embargo, tenga en cuenta que no todas las clases pueden tener una referencia débil. En particular, la mayoría de los tipos incorporados no pueden. Algunos tipos incorporados pueden tener una referencia débil si los subclasifica (como dict ), pero otros no (como int ).

Usted no Ese es todo el punto. Imagínese si l está en una biblioteca fuera de su control. Tiene todo el derecho de esperar que los elementos de la colección no desaparezcan.

Además, imagínate si fuera de otra manera. Tendría preguntas aquí en SO “¿Cómo evito que otros borren mis objetos?”. Como diseñador de idiomas, no puedes satisfacer ambas demandas.