[python] 파이썬에서 객체의 현재 참조 수를 얻는 방법이 있습니까?

파이썬에서 객체의 현재 참조 수를 얻는 방법이 있습니까?



답변

파이썬에 따라 문서sys모듈은 기능이 포함되어 있습니다

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

개체 arg temp 참조로 인해 일반적으로 예상보다 1이 높습니다.


답변

gc가비지 수집기 내장에 대한 인터페이스 인 모듈을 사용하여를 gc.get_referrers(foo)참조하는 모든 목록을 가져 오기 위해 호출 할 수 있습니다 foo.

따라서 len(gc.get_referrers(foo))해당 목록의 길이, 즉 당신이 추구하는 리퍼러 수를 제공합니다.

gc모듈 문서 도 참조하십시오 .


답변

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을 뺄 필요가 없다는 것입니다.


답변