0
당신은 module
라고하는 Python에 C++ (또는 C) 확장자를 썼다고합시다. 배열 배열을 반환합니다. 리턴 된 배열과 그 배열은 참조 카운트로서 무엇을 가져야 하는가?파이썬에 대한 C/C++ 확장 기능에서, 반환 된 PyObject *는 어떤 참조 카운트를 가져야합니까?
파이썬 코드는 내가 g(x)
이 2
하지 3
것으로 기대
import my_module
from sys import getrefcount as g # will use to check reference count
def use_module():
x = my_module.func()
print 'x =', x
print 'g(x) =', g(x)
print 'g(x[0]) =', g(x[0])
test = 'some random thing'
print 'should be', g(test), '?'
use_module()
>>> x = ((1,2,3,4) , [2,3] , {'one':1})
>>> g(x) = 3
>>> g(x[0]) = 3
>>> should be 2 ?
같은 것입니다. 내 C에서
을 (g
하나를 추가 한 후 x
를 참조) ++ 확장, 나는 확실히 만든 그 배열과 모든 하위 컬렉션과 그 요소는 파이썬에 반환되기 전에 1
의 참조 카운트를, 그래서 난 어떻게 그렇게 빨리 총 3
까지 총 확실하지? 아마도 PyObject*
의 참조 횟수는 0
이어야합니다.
편집 : 죄송합니다, 저는 바보입니다. 나는 그것을 모른 채 다른 참조를 만들고 있었다.
더 명확히 말하면 https://docs.python.org/3/c-api/intro.html#reference-count-details는 refcount 작업이 언제 발생해야하는지 정확하게 알려줍니다. 이자형. 참조 수신, 차용, 도난 등에 관한 정보 – glglgl