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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top