¿Hay alguna manera de obtener el recuento de ref mentores de un objeto en Python?¿Hay alguna forma de obtener el recuento actual de ref de un objeto en Python?
Respuesta
Con el módulo de gc
, la interfaz con las agallas recolector de basura, puede llamar gc.get_referrers(foo)
para obtener una lista de todo lo referente 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 está buscando.
Véase también el gc
module documentation.
De acuerdo con el pitón documentation, el módulo sys
contiene una función:
import sys
sys.getrefcount(object) #-- Returns the reference count of the object.
Generalmente 1 más alta que se podría esperar, debido a objeto arg referencia temporal.
Enlace a la documentación oficial: https://docs.python.org/2/library/sys.html#sys.getrefcount – moi
Hay gc.get_referrers()
y sys.getrefcount()
. Pero, es un poco difícil ver cómo el 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 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.
Propongo hacer recuento manual de referencia para fines tales como "aislamiento en el cambio", es decir, "clonar si se hace referencia en otro lugar".
- 1. ¿Hay alguna forma de averiguar el recuento actual de un semáforo win32?
- 2. ¿Hay alguna forma de obtener el nombre de la unidad actual de un archivo de inclusión?
- 3. ¿Hay alguna forma de sobrecargar + = en python?
- 4. ¿Hay alguna forma incorporada para obtener la longitud de un iterable en python?
- 5. Obtener el recuento de referencia de un objeto en PHP?
- 6. ¿Hay alguna forma de controlar los cambios en un objeto?
- 7. ¿Hay alguna forma de obtener un valor de propiedad de un objeto utilizando la clase PropertyPath?
- 8. En R6RS Scheme, ¿hay alguna forma de obtener el entorno actual para usar con eval?
- 9. ¿Hay alguna forma de que MS Access pueda obtener el usuario actual de Active Directory?
- 10. ¿Hay alguna forma en Grails de obtener todo el registro?
- 11. ¿Hay alguna forma común de verificar en Python si un objeto es cualquier tipo de función?
- 12. ¿Cómo obtener el recuento de referencia de un NSObject?
- 13. ¿Hay alguna forma de exportar un objeto ActiveRecord a seeds.rb?
- 14. ¿Hay alguna forma de detectar si un objeto está bloqueado?
- 15. ¿Hay alguna forma de obtener la dirección de un registro?
- 16. ¿Hay alguna forma de serializar el objeto linq para Memcached?
- 17. ¿Hay alguna manera de obtener el objeto predeterminado de $ .ajax?
- 18. ¿Hay alguna forma de obtener un objeto gráfico dentro del programa de la consola?
- 19. python. obtener el tamaño de un objeto
- 20. ¿Hay alguna forma de obtener el número de elementos del objeto?
- 21. ¿Hay alguna forma en XQuery de obtener la hora actual en milisegundos desde algún tiempo?
- 22. ¿Hay alguna forma de obtener una dirección de referencia?
- 23. ¿Hay alguna manera de obtener un REPL en pydev?
- 24. ¿Hay alguna forma de multirreproducir un SqlDataReader?
- 25. ¿Es posible obtener el recuento de referencia del objeto?
- 26. ¿Hay alguna forma de pasar el iPhone?
- 27. ¿Hay alguna forma de acceder dinámicamente a un superglobal?
- 28. ¿Hay alguna forma de obtener un toque de tres dedos en el simulador de iPhone
- 29. ¿Hay alguna forma de obtener el número de registros de una consulta con Zend-framework?
- 30. ¿Hay alguna otra forma de obtener la zona horaria de un usuario de un objeto HttpServletRequest en Spring MVC?
También se debe mencionar que el conteo será +1, ya que la lista de gc se refiere también al objeto. –
Creo @ Dan que la respuesta es correcta: >>> import gc >>> bar de clase(): ... pasar ... >>> b = Bar() >>> len (gc.get_referrers (b)) >>> gc.get_referrers (b) [{'b': <__ main__.Bar instance at 0x7f1f010d0e18>, 'Bar':, '__builtins__': , '__package__': None, 'gc': , '__name__': '__main__', '__doc__': Ninguno}] –
Havok
@ tehvan's answer ('sys.getrefcount (object)') es más sencillo que 'len (gc.get_referrers (foo))', si realmente solo necesitas el número. – moi