Почему Python ведет подсчет ссылок на False и True? - PullRequest
21 голосов
/ 22 сентября 2009

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

Py_INCREF(Py_False);
return Py_False;

...

Py_INCREF(Py_True);
return Py_True;

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

1 Ответ

22 голосов
/ 22 сентября 2009

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

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

...