# 힙에 객체 할당하기

PyObject* `_PyObject_New`( PyTypeObject *type)
  Return value: New reference.

PyVarObject* `_PyObject_NewVar`( PyTypeObject *type, Py_ssize_t size)
  Return value: New reference.

PyObject* `PyObject_Init`( PyObject *op, PyTypeObject *type)
  Return value: Borrowed reference.

  새로 할당된 객체 op를 형과 초기 참조로 초기화합니다. 초기화된 객체를 반환합니다. type이 객체가 순환 가비지 감지기에 참여함을 나타내면, 감지기의 감시되는 객체 집합에 추가됩니다. 객체의 다른 필드는 영향을 받지 않습니다.

PyVarObject* `PyObject_InitVar`( PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
  Return value: Borrowed reference.

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

TYPE* `PyObject_New`(TYPE, PyTypeObject *type)
  Return value: New reference.

  C 구조체 형 TYPE과 파이썬 형 객체 type을 사용하여 새로운 파이썬 객체를 할당합니다. 파이썬 객체 헤더로 정의되지 않은 필드는 초기화되지 않습니다; 객체의 참조 횟수는 1이 됩니다. 메모리 할당의 크기는 형 객체의 `tp_basicsize` 필드에서 결정됩니다.

TYPE* `PyObject_NewVar`(TYPE, PyTypeObject *type, Py_ssize_t size)
  Return value: New reference.

  C 구조체 형 TYPE과 파이썬 타입 형 type을 사용하여 새로운 파이썬 객체를 할당합니다. 파이썬 객체 헤더로 정의되지 않은 필드는 초기화되지 않습니다. 할당된 메모리는 TYPE 구조체에 더해 type의 `tp_itemsize` 필드에 의해 주어진 크기의 size 필드를 허용합니다. 이는 튜플과 같은 객체를 구현할 때 유용합니다. 튜플은 만들 때 크기를 결정할 수 있습니다. 같은 할당에 필드 배열을 포함 시키면, 할당 횟수가 줄어들어, 메모리 관리 효율성이 향상됩니다.

void `PyObject_Del`(void *op)

  `PyObject_New()` 나 `PyObject_NewVar()`를 사용한 객체에 할당된 메모리를 해제합니다. 이것은 일반적으로 객체의 형에 지정된 `tp_dealloc` 처리기에서 호출됩니다. 메모리가 더는 유효한 파이썬 객체가 아니므로, 이 호출 후에는 객체의 필드에 액세스해서는 안 됩니다.

PyObject `_Py_NoneStruct`

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

더 보기

`PyModule_Create()`

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