Por que Python manter uma contagem de referência em False e True?
-
12-09-2019 - |
Pergunta
Eu estava olhando para o código fonte para o hasattr função built-in e notei um par de linhas que despertou meu interesse:
Py_INCREF(Py_False);
return Py_False;
...
Py_INCREF(Py_True);
return Py_True;
Não são Py_False
e valores globais Py_True
? Só por pura curiosidade, por que é Python manter uma contagem de referência para essas variáveis?
Solução
É para fazer tudo uniforme manipulação de objeto. Se eu estou escrevendo código C que lida com um valor de retorno de uma função, eu tenho que aumentar e diminuir a contagem de referência no objeto. Se a função retorna-me a verdade, eu não quero ter que verificar para ver se é um desses objetos especiais para saber se a manipular a sua contagem de referência. Eu posso tratar todos os objetos de forma idêntica.
Ao tratar Verdadeiro e Falso (e Nenhum, btw) o mesmo que todos os outros objetos, o código C é muito mais simples por toda parte.