Python

힙에 객체 할당하기

PyObject *_PyObject_New(PyTypeObject *type)
반환값: 새 참조.
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
반환값: 새 참조.
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
반환값: 빌린 참조. 상의 안정 ABI.

Initialize a newly allocated object op with its type and initial reference. Returns the initialized object. Other fields of the object are not initialized. Despite its name, this function is unrelated to the object’s __init__() method (tp_init slot). Specifically, this function does not call the object’s __init__() method.

일반적으로 이 함수는 저수준 루틴으로 간주하십시오. 가능한 경우 tp_alloc 를 사용하세요. 유형에 대해 tp_alloc 을 구현하려면 PyType_GenericAlloc() 또는 PyObject_New() 를 선호하십시오.

참고

이 함수는 초기 PyObject 구조체에 해당하는 객체의 메모리만 초기화할 뿐, 나머지는 초기화하지 않습니다.

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
반환값: 빌린 참조. 상의 안정 ABI.

이것은 PyObject_Init()가 수행하는 모든 작업을 수행하고, 가변 크기 객체의 길이 정보도 초기화합니다.

참고

이 함수는 객체의 메모리 일부만 초기화합니다. 나머지 영역은 초기화하지 않습니다.

PyObject_New(TYPE, typeobj)

C 구조체 형 TYPE\과 파이썬 타입 형 typeobj (PyTypeObject*) 를 콜 :c:func:`PyObject_Malloc`로 메모리를 할당하고, 이를 :c:func:`PyObject_Init`처럼 초기화하여 새로운 파이썬 객체를 할당합니다. 호출자는 객체에 대한 유일한 참조를 소유하게 됩니다 (즉, 참조 카운트는 1이 됩니다).

메모리를 할당하려고 이 함수를 직접 호출하는 것은 피하십시오. 대신 유형의 tp_alloc 슬롯을 호출하십시오.

유형의 tp_alloc 슬롯을 채울 때, :c:func:`PyType_GenericAlloc`을 사용하여 이 매크로를 단순히 호출하는 사용자 정의 함수보다 선호합니다.

이 매크로는 tp_alloc, tp_new (__new__()), 또는 tp_init (__init__())를 호출하지 않습니다.

이것은 :c:member:`~PyTypeObject.tp_flags`에서 :c:macro:`Py_TPFLAGS_HAVE_GC`가 설정된 객체에는 사용할 수 없습니다. 대신 :c:macro:`PyObject_GC_New`를 사용하십시오.

이 매크로로 할당된 메모리는 PyObject_Free() (일반적으로 객체의 tp_free 슬롯을 통해 호출됨)로 해제되어야 합니다.

참고

반환된 메모리가 초기화되기 전에 완전히 0으로 설정되어 있을 것이라고 보장할 수 없습니다.

참고

이 매크로는 주어진 유형의 완전히 초기화된 객체를 구성하지 않습니다. 단지 메모리를 할당하고 tp_init 에 의한 추가 초기화를 위해 준비할 뿐입니다. 완전히 초기화된 객체를 구성하려면 typeobj 를 호출하십시오. 예:

PyObject *foo = PyObject_CallNoArgs((PyObject *)&PyFoo_Type);
PyObject_NewVar(TYPE, typeobj, size)

:c:macro:`PyObject_New`와 유사하지만 다음과 같은 차이점이 있습니다:

  • typeobj*의 :c:member:`~PyTypeObject.tp_itemsize` 필드가 지정하는 크기의 *TYPE 구조체와 size (Py_ssize_t) 필드에 충분한 메모리를 할당합니다.

  • 메모리는 :c:func:`PyObject_InitVar`처럼 초기화됩니다.

이것은 튜플처럼 생성 시 크기를 결정할 수 있는 객체를 구현하는 데 유용합니다. 필드 배열을 같은 할당에 포함시키면, 할당 횟수가 줄어들어, 메모리 관리 효율성이 향상됩니다.

메모리를 할당하려고 이 함수를 직접 호출하는 것은 피하십시오. 대신 유형의 tp_alloc 슬롯을 호출하십시오.

유형의 tp_alloc 슬롯을 채울 때, :c:func:`PyType_GenericAlloc`을 사용하여 이 매크로를 단순히 호출하는 사용자 정의 함수보다 선호합니다.

이것은 :c:member:`~PyTypeObject.tp_flags`에서 :c:macro:`Py_TPFLAGS_HAVE_GC`가 설정된 객체에는 사용할 수 없습니다. 대신 :c:macro:`PyObject_GC_NewVar`를 사용하십시오.

이 함수로 할당된 메모리는 PyObject_Free() (일반적으로 객체의 tp_free 슬롯을 통해 호출됨)로 해제되어야 합니다.

참고

반환된 메모리가 초기화되기 전에 완전히 0으로 설정되어 있을 것이라고 보장할 수 없습니다.

참고

이 매크로는 주어진 유형의 완전히 초기화된 객체를 구성하지 않습니다. 단지 메모리를 할당하고 tp_init 에 의한 추가 초기화를 위해 준비할 뿐입니다. 완전히 초기화된 객체를 구성하려면 typeobj 를 호출하십시오. 예:

PyObject *list_instance = PyObject_CallNoArgs((PyObject *)&PyList_Type);
PyObject _Py_NoneStruct

파이썬에서 None으로 노출되는 객체. 이 객체에 대한 포인터로 평가되는 Py_None 매크로를 사용해서 액세스해야 합니다.

더 보기

모듈 객체

확장 모듈을 할당하고 만듭니다.

소프트 폐지된 에일리어스

이것들은 기존 함수 및 매크로에 대한 에일리어스입니다. 이는 순전히 하위 호환성을 위해 존재합니다.

소프트 폐지된 에일리어스

함수

PyObject_NEW(type, typeobj)

PyObject_New

PyObject_NEW_VAR(type, typeobj, n)

PyObject_NewVar

PyObject_INIT(op, typeobj)

PyObject_Init()

PyObject_INIT_VAR(op, typeobj, n)

PyObject_InitVar()

PyObject_MALLOC(n)

PyObject_Malloc()

PyObject_REALLOC(p, n)

PyObject_Realloc()

PyObject_FREE(p)

PyObject_Free()

PyObject_DEL(p)

PyObject_Free()

PyObject_Del(p)

PyObject_Free()