Подтвердить что ты не робот

Почему Python поддерживает подсчет ссылок на False и True?

Я смотрел исходный код на встроенную функцию hasattr и заметил пару строк, которые вызвали мой интерес:

Py_INCREF(Py_False);
return Py_False;

...

Py_INCREF(Py_True);
return Py_True;

Не глобальные значения Py_False и Py_True? Просто из чистого любопытства, почему Python сохраняет ссылочный счет для этих переменных?

4b9b3361

Ответ 1

Это сделать всю обработку объекта единообразной. Если я пишу C-код, который обрабатывает возвращаемое значение из функции, я должен увеличивать и уменьшать счетчик ссылок на этот объект. Если функция возвращает меня True, я не хочу проверять, не является ли одним из этих специальных объектов знать, следует ли манипулировать своим счетчиком ссылок. Я могу обрабатывать все объекты одинаково.

Рассматривая True и False (и None, btw) так же, как и все другие объекты, код C намного проще во всем.