python refcounting

¿Hay alguna forma de obtener el recuento actual de ref de un objeto en Python?



refcounting (3)

¿Hay alguna forma de obtener el recuento actual de ref de un objeto en Python?


Usando el módulo gc , la interfaz para las tripas del recolector de basura, puede llamar a gc.get_referrers(foo) para obtener una lista de todo lo que se refiere a foo .

Por lo tanto, len(gc.get_referrers(foo)) le dará la longitud de esa lista: el número de referencias, que es lo que busca.

Ver también la documentación del módulo gc .


Hay gc.get_referrers() y sys.getrefcount() . Pero, es un poco difícil ver cómo sys.getrefcount(X) podría servir para el propósito del conteo tradicional de referencias. Considerar:

import sys def function(X): sub_function(X) def sub_function(X): sub_sub_function(X) def sub_sub_function(X): print sys.getrefcount(X)

Entonces la function(SomeObject) entrega ''7'',
sub_function(SomeObject) entrega ''5'',
sub_sub_function(SomeObject) entrega ''3'', y
sys.getrefcount(SomeObject) entrega ''2''.

En otras palabras: si usa sys.getrefcount() debe tener en cuenta la profundidad de llamada de la función. Para gc.get_referrers() uno podría tener que filtrar la lista de referencias.

Me propongo hacer un recuento de referencia manual para fines tales como "aislamiento en el cambio", es decir, "clonar si se hace referencia en otro lugar".


De acuerdo con la documentación de Python, el módulo sys contiene una función:

import sys sys.getrefcount(object) #-- Returns the reference count of the object.

Generalmente 1 más alto de lo esperado, debido a la referencia temporal del objeto arg.