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.
