# Alocando objetos na heap

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.

  Inicializa um objeto op recém-alocado com seu tipo e sua referência inicial. Retorna o objeto inicializado. Se type indicar no detector de lixo cíclico que o objeto participa, ele é adicionado ao grupo do detector de objetos observados. Outros campos do objeto não são afetados.

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

  Isto faz tudo que o `PyObject_Init()` faz e também inicializa a informação de comprimento para um objeto de tamanho variável.

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

  Aloca um novo objeto Python usando o tipo de estrutura C TYPE e o tipo de objeto Python type. Campos não definidos no cabeçalho do objeto Python não são inicializados; a contagem de referências do objeto será um deles. O tamanho da alocação de memória é determinado do campo `tp_basicsize` do objeto tipo.

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

  Aloca um novo objeto Python usando o tipo de estrutura do C TYPE e o objeto Python do tipo type. Campos não definidos pelo cabeçalho do objeto Python não são inicializados. A memória alocada permite a estrutura TYPE e os campos size do tamanho dado pelo campo `tp_itemsize` do tipo type. Isto é útil para implementar objetos como tuplas, as quais são capazes de determinar seu tamanho no tempo da construção. Incorporando o vetor de campos dentro da mesma alocação diminuindo o numero de alocações, melhorando a eficiência do gerenciamento de memória.

void `PyObject_Del`(void *op)

  Libera memória alocada a um objeto usando `PyObject_New()` ou `PyObject_NewVar()`. Isto é normalmente chamado pelo `tp_dealloc` manipulador especificado no tipo do objeto. Os campos do objeto não devem ser acessados após esta chamada como a memória não é mais um objeto Python válido.

PyObject `_Py_NoneStruct`

  Objeto o qual é visível no Python como `None`. Isto só deve ser acessado usando a macro `Py_None`, o qual avalia como um ponteiro para este objeto.

Ver também

`PyModule_Create()`

  Para alocar e criar módulos de extensão.