참조 횟수¶
The macros in this section are used for managing reference counts of Python objects.
-
void Py_INCREF(PyObject *o)¶
Indicate taking a new strong reference to object o, indicating it is in use and should not be destroyed.
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.When done using the object, release it by calling
Py_DECREF()
.객체는
NULL
일 수 없습니다;NULL
이 아닌지 확실하지 않으면,Py_XINCREF()
를 사용하십시오.Do not expect this function to actually modify o in any way.
-
void Py_XINCREF(PyObject *o)¶
Similar to
Py_INCREF()
, but the object o can beNULL
, in which case this has no effect.See also
Py_XNewRef()
.
-
PyObject *Py_NewRef(PyObject *o)¶
- Part of the 안정 ABI 버전 3.10 이후로.
Create a new strong reference to an object: call
Py_INCREF()
on o and return the object o.When the strong reference is no longer needed,
Py_DECREF()
should be called on it to release the reference.The object o must not be
NULL
; usePy_XNewRef()
if o can beNULL
.예를 들어:
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 안정 ABI 버전 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)¶
Release a strong reference to object o, indicating the reference is no longer used.
마지막 강한 참조가 해제되면 (즉 객체의 참조 횟수가 0이 되면), 객체 형의 할당 해제 함수 (반드시
NULL
이 아니어야 합니다)가 호출됩니다.This function is usually used to delete a strong reference before exiting its scope.
객체는
NULL
일 수 없습니다;NULL
이 아닌지 확실하지 않으면,Py_XDECREF()
를 사용하십시오.Do not expect this function to actually modify o in any way.
경고
할당 해제 함수는 임의의 파이썬 코드가 호출되도록 할 수 있습니다 (예를 들어,
__del__()
메서드가 있는 클래스 인스턴스가 할당 해제될 때). 이러한 코드에서의 예외는 전파되지 않지만, 실행된 코드는 모든 파이썬 전역 변수에 자유롭게 액세스할 수 있습니다. 이것은Py_DECREF()
가 호출되기 전에 전역 변수에서 도달할 수 있는 모든 객체가 일관성 있는 상태에 있어야 함을 뜻합니다. 예를 들어, 리스트에서 객체를 삭제하는 코드는 삭제된 객체에 대한 참조를 임시 변수에 복사하고, 리스트 데이터 구조를 갱신한 다음, 임시 변수에 대해Py_DECREF()
를 호출해야 합니다.
-
void Py_XDECREF(PyObject *o)¶
Similar to
Py_DECREF()
, but the object o can beNULL
, in which case this has no effect. The same warning fromPy_DECREF()
applies here as well.
-
void Py_CLEAR(PyObject *o)¶
객체 o에 대한 강한 참조를 해제합니다. 객체는
NULL
일 수 있습니다, 이때 매크로는 효과가 없습니다; 그렇지 않으면 인자도NULL
로 설정된다는 점을 제외하고는, 효과가Py_DECREF()
와 같습니다. 매크로가 임시 변수를 신중하게 사용하고, 참조를 해제하기 전에 인자를NULL
로 설정하기 때문에,Py_DECREF()
에 대한 경고는 전달된 객체와 관련하여 적용되지 않습니다.가비지 수집 중에 탐색 될 수 있는 객체에 대한 참조를 해제할 때마다 이 매크로를 사용하는 것이 좋습니다.
-
void Py_IncRef(PyObject *o)¶
- Part of the 안정 ABI.
Indicate taking a new strong reference to 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 안정 ABI.
Release a strong reference to object o. A function version of
Py_XDECREF()
. It can be used for runtime dynamic embedding of Python.
The following functions or macros are only for use within the interpreter core:
_Py_Dealloc()
, _Py_ForgetReference()
, _Py_NewReference()
,
as well as the global variable _Py_RefTotal
.