파이썬에서 객체의 현재 참조 수를 얻는 방법이 있습니까?
답변:
gc
가비지 수집기 내장에 대한 인터페이스 인 모듈을 사용하여를 gc.get_referrers(foo)
참조하는 모든 목록을 가져 오기 위해 호출 할 수 있습니다 foo
.
따라서 len(gc.get_referrers(foo))
해당 목록의 길이, 즉 당신이 추구하는 리퍼러 수를 제공합니다.
gc
모듈 문서 도 참조하십시오 .
sys.getrefcount(object)
)은 len(gc.get_referrers(foo))
실제로 숫자 만 필요하면.
이 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()
하나의 참조 자 목록을 필터링 할 수도 있습니다.
"변경시 격리", 즉 "다른 곳에서 참조되는 경우 복제"와 같은 목적으로 수동 참조 계산 을 수행 할 것을 제안합니다 .
import ctypes
my_var = 'hello python'
my_var_address = id(my_var)
ctypes.c_long.from_address(my_var_address).value
ctypes는 변수의 주소를 인수로 사용합니다. sys.getRefCount보다 ctypes를 사용하는 이점은 결과에서 1을 뺄 필요가 없다는 것입니다.