Есть gc.get_referrers()
и sys.getrefcount()
. Но довольно трудно понять, как sys.getrefcount(X)
может служить для традиционного подсчета ссылок. Рассмотрим:
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)
Затем function(SomeObject)
доставляет «7»,
sub_function(SomeObject)
поставляет '5',
sub_sub_function(SomeObject)
поставляет «3» и
sys.getrefcount(SomeObject)
поставляет '2'.
Другими словами: если вы используете sys.getrefcount()
, вы должны знать глубину вызова функции. Для gc.get_referrers()
может потребоваться отфильтровать список рефереров.
Я бы предложил ручной подсчет ссылок для таких целей, как «изоляция при изменении», то есть «клонировать, если есть ссылка в другом месте».