파이썬에서 객체의 현재 ref 카운터를 얻을 수 있는 방법이 있습니까?
파이썬에서 객체의 현재 ref 카운터를 얻을 수 있는 방법이 있습니까?
파이썬 문서에 따르면,sys
모듈에는 다음과 같은 기능이 포함됩니다.
import sys
sys.getrefcount(object) #-- Returns the reference count of the object.
일반적으로 개체 Arg 온도 참조로 인해 예상보다 1이 높습니다.
사용gc
모듈, 쓰레기 수집기 내장의 인터페이스, 당신이 부를 수 있습니다.gc.get_referrers(foo)
관련된 모든 것의 목록을 얻다foo
.
이런 이유로,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
변수의 주소를 인수로 사용합니다.사용의 이점ctypes
위에sys.getRefCount
즉, 결과에서 1을 뺄 필요가 없습니다.
Python의 모든 개체에는 참조 카운트와 유형에 대한 포인터가 있습니다.우리는 sys 모듈로 객체의 현재 참조 카운트를 얻을 수 있습니다.sys.getrefcount(object)를 사용할 수 있지만 getrefcount()로 개체를 전달하면 참조 카운트가 1씩 증가합니다.
import sys
name = "Steve"
# 2 references, 1 from the name variable and 1 from getrefcount
sys.getrefcount(name)
언급URL : https://stackoverflow.com/questions/510406/is-there-a-way-to-get-the-current-ref-count-of-an-object-in-python
'source' 카테고리의 다른 글
런타임에 사용자로부터 입력을 받는 방법 (0) | 2023.07.30 |
---|---|
angular2 템플릿에서 정적 함수 호출 (0) | 2023.07.30 |
Rest Controller에서 메서드 Cors 문제 삭제 (0) | 2023.07.30 |
Spring Bean 범위: 세션 및 글로벌 세션 (0) | 2023.07.30 |
objc_set Associated Object()란 무엇이며 어떤 경우에 사용해야 합니까? (0) | 2023.07.30 |