Почему Python сохраняет счетчик ссылок False и True?
-
12-09-2019 - |
Вопрос
Я просматривал исходный код встроенной функции hasattr и заметил пару строк, которые меня заинтересовали:
Py_INCREF(Py_False);
return Py_False;
...
Py_INCREF(Py_True);
return Py_True;
Разве это не Py_False
и Py_True
глобальные ценности?Просто из чистого любопытства, почему Python сохраняет счетчик ссылок для этих переменных?
Решение
Это делается для того, чтобы сделать все операции с объектами единообразными.Если я пишу код C, который обрабатывает возвращаемое значение из функции, мне приходится увеличивать и уменьшать счетчик ссылок на этот объект.Если функция возвращает мне значение True, мне не нужно проверять, является ли это одним из тех специальных объектов, чтобы знать, стоит ли манипулировать его счетчиком ссылок.Я могу относиться ко всем объектам одинаково.
Если рассматривать True и False (и None, кстати) так же, как и все остальные объекты, код C во всем становится намного проще.