참조 횟수¶
이 섹션의 매크로는 파이썬 객체의 참조 횟수를 관리하는 데 사용됩니다.
-
void Py_INCREF(PyObject *o)¶
Increment the reference count for object o.
This function is usually used to convert a borrowed reference to a strong reference in-place. The
Py_NewRef()
function can be used to create a new strong reference.The object must not be
NULL
; if you aren’t sure that it isn’tNULL
, usePy_XINCREF()
.
-
void Py_XINCREF(PyObject *o)¶
객체 o에 대한 참조 횟수를 늘립니다. 객체는
NULL
일 수 있습니다, 이때 매크로는 효과가 없습니다.See also
Py_XNewRef()
.
-
PyObject *Py_NewRef(PyObject *o)¶
- Part of the Stable ABI since version 3.10.
Create a new strong reference to an object: increment the reference count of the object o and return the object o.
When the strong reference is no longer needed,
Py_DECREF()
should be called on it to decrement the object reference count.The object o must not be
NULL
; usePy_XNewRef()
if o can beNULL
.For example:
Py_INCREF(obj); self->attr = obj;
can be written as:
self->attr = Py_NewRef(obj);
See also
Py_INCREF()
.버전 3.10에 추가.
-
PyObject *Py_XNewRef(PyObject *o)¶
- Part of the Stable ABI since version 3.10.
Similar to
Py_NewRef()
, but the object o can be NULL.If the object o is
NULL
, the function just returnsNULL
.버전 3.10에 추가.
-
void Py_DECREF(PyObject *o)¶
Decrement the reference count for object o.
If the reference count reaches zero, the object’s type’s deallocation function (which must not be
NULL
) is invoked.This function is usually used to delete a strong reference before exiting its scope.
The object must not be
NULL
; if you aren’t sure that it isn’tNULL
, usePy_XDECREF()
.경고
할당 해제 함수는 임의의 파이썬 코드가 호출되도록 할 수 있습니다 (예를 들어,
__del__()
메서드가 있는 클래스 인스턴스가 할당 해제될 때). 이러한 코드에서의 예외는 전파되지 않지만, 실행된 코드는 모든 파이썬 전역 변수에 자유롭게 액세스할 수 있습니다. 이것은Py_DECREF()
가 호출되기 전에 전역 변수에서 도달할 수 있는 모든 객체가 일관성 있는 상태에 있어야 함을 뜻합니다. 예를 들어, 리스트에서 객체를 삭제하는 코드는 삭제된 객체에 대한 참조를 임시 변수에 복사하고, 리스트 데이터 구조를 갱신한 다음, 임시 변수에 대해Py_DECREF()
를 호출해야 합니다.
-
void Py_XDECREF(PyObject *o)¶
객체 o에 대한 참조 횟수를 감소시킵니다. 객체는
NULL
일 수 있습니다, 이때 매크로는 효과가 없습니다; 그렇지 않으면 효과는Py_DECREF()
와 같으며 같은 경고가 적용됩니다.
-
void Py_CLEAR(PyObject *o)¶
객체 o에 대한 참조 횟수를 감소시킵니다. 객체는
NULL
일 수 있습니다, 이때 매크로는 효과가 없습니다; 그렇지 않으면 인자도NULL
로 설정된다는 점을 제외하고는, 효과가Py_DECREF()
와 같습니다. 매크로가 임시 변수를 신중하게 사용하고, 참조 횟수를 줄이기 전에 인자를NULL
로 설정하기 때문에,Py_DECREF()
에 대한 경고는 전달된 객체와 관련하여 적용되지 않습니다.가비지 수집 중에 탐색 될 수 있는 객체의 참조 횟수를 감소시킬 때마다 이 매크로를 사용하는 것이 좋습니다.
-
void Py_IncRef(PyObject *o)¶
- Part of the Stable ABI.
Increment the reference count for object o. A function version of
Py_XINCREF()
. It can be used for runtime dynamic embedding of Python.
-
void Py_DecRef(PyObject *o)¶
- Part of the Stable ABI.
Decrement the reference count for object o. A function version of
Py_XDECREF()
. It can be used for runtime dynamic embedding of Python.
다음 함수나 매크로는 인터프리터 코어에서만 사용할 수 있습니다: _Py_Dealloc()
, _Py_ForgetReference()
, _Py_NewReference()
및 전역 변수 _Py_RefTotal
.