Вопрос

Я просматривал исходный код встроенной функции 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 во всем становится намного проще.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top