# Alocando objetos na heap

PyObject *`_PyObject_New`(PyTypeObject *type)
  Retorna valor: Nova referência.

PyVarObject *`_PyObject_NewVar`(PyTypeObject *type, Py_ssize_t size)
  Retorna valor: Nova referência.

PyObject *`PyObject_Init`(PyObject *op, PyTypeObject *type)
  Retorna valor: Referência emprestada. Part of the Stable ABI.

  Inicializa um objeto op recém-alocado com seu tipo e referência inicial. Retorna o objeto inicializado. Se o type indica que o objeto participa no detector de lixo cíclico 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)
  Retorna valor: Referência emprestada. Part of the Stable ABI.

  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)
  Retorna valor: Nova referência.

  Allocate a new Python object using the C structure type TYPE and the Python type object type. Fields not defined by the Python object header are not initialized. The caller will own the only reference to the object (i.e. its reference count will be one). The size of the memory allocation is determined from the `tp_basicsize` field of the type object.

TYPE *`PyObject_NewVar`(TYPE, PyTypeObject *type, Py_ssize_t size)
  Retorna valor: Nova referência.

  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.