source

파이썬에서 객체의 현재 ref 카운터를 얻을 수 있는 방법이 있습니까?

manycodes 2023. 7. 30. 17:58
반응형

파이썬에서 객체의 현재 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

반응형