Contagem de Referências¶
As macros nesta seção são usadas para gerenciar contagens de referências de objetos Python.
-
void
Py_INCREF(PyObject *o)¶ Aumenta a contagem de referências para o objeto o. O objeto não deve ser
NULL; se você não tem certeza de que não éNULL, usePy_XINCREF().
-
void
Py_XINCREF(PyObject *o)¶ Aumenta a contagem de referências para o objeto o. O objeto pode ser
NULL, caso em que a macro não tem efeito.
-
void
Py_DECREF(PyObject *o)¶ Diminui a contagem de referências para o objeto o. O objeto não deve ser
NULL; se você não tem certeza de que não éNULL, usePy_XDECREF(). Se a contagem de referências chegar a zero, a função de desalocação do tipo de objeto (que não deve serNULL) é chamada.Aviso
A função de desalocação pode fazer com que o código Python arbitrário seja invocado (por exemplo, quando uma instância de classe com um método
__del__()é desalocada). Embora as exceções em tal código não sejam propagadas, o código executado tem acesso livre a todas as variáveis globais do Python. Isso significa que qualquer objeto que é alcançável de uma variável global deve estar em um estado consistente antes dePy_DECREF()ser invocado. Por exemplo, o código para excluir um objeto de uma lista deve copiar uma referência ao objeto excluído em uma variável temporária, atualizar a estrutura de dados da lista e então chamarPy_DECREF()para a variável temporária.
-
void
Py_XDECREF(PyObject *o)¶ Diminui a contagem de referências para o objeto o. O objeto pode ser
NULL, caso em que a macro não tem efeito; caso contrário, o efeito é o mesmo dePy_DECREF(), e o mesmo aviso se aplica.
-
void
Py_CLEAR(PyObject *o)¶ Diminui a contagem de referências para o objeto o. O objeto pode ser
NULL, caso em que a macro não tem efeito; caso contrário, o efeito é o mesmo dePy_DECREF(), exceto que o argumento também é definido comoNULL. O aviso paraPy_DECREF()não se aplica em relação ao objeto passado porque a macro usa cuidadosamente uma variável temporária e define o argumento comoNULLantes de diminuir sua contagem de referências.É uma boa ideia usar essa macro sempre que diminuir a contagem de referências de um objeto que pode ser percorrido durante a coleta de lixo.
As seguintes funções são para incorporação dinâmica de Python em tempo de execução: Py_IncRef(PyObject *o), Py_DecRef(PyObject *o). Elas são simplesmente versões de função exportadas de Py_XINCREF() e Py_XDECREF(), respectivamente.
As seguintes funções ou macros são apenas para uso dentro do núcleo do interpretador: _Py_Dealloc(), _Py_ForgetReference(), _Py_NewReference(), bem como a variável global _Py_RefTotal.