< blockquote>
Возвращает счетчик ссылок на объект. Возвращаемое значение
обычно на единицу больше, чем вы могли ожидать, поскольку оно включает
(временную) ссылку в качестве аргумента функции getrefcount().
Обратите внимание, что возвращаемое значение может на самом деле не отражать количество
действительно удерживаемых ссылок на объект. Например, некоторые объекты
«бессмертны» и имеют очень высокий счетчик ссылок, который не отражает
фактического количества ссылок. Следовательно, не полагайтесь на то, что возвращаемое
значение будет точным, кроме значений 0 или 1.
Изменено в версии 3.12: бессмертные объекты имеют очень большое количество ссылок
, которое не соответствует фактическому количеству ссылок на объект.
Когда в Python вызывается sys.getrefcount(expr), то, по крайней мере, имеется ссылка на объект, полученный из expr: ссылка из самого getrefcount(). Например, следующий код возвращает минимально возможное возвращаемое значение getrefcount(), насколько я понимаю, равное 1.
Код: Выделить всё
import sys
print(sys.getrefcount(object()))
Получите счетчик ссылок объекта Python o.
Обратите внимание, что возвращаемое значение может не отражать фактическое количество
ссылок на объект. Например, некоторые объекты
«бессмертны» и имеют очень высокий счетчик ссылок, который не отражает
фактического количества ссылок. Следовательно, не полагайтесь на точность возвращаемого
значения, отличного от значения 0 или 1.
Используйте функцию Py_SET_REFCNT(), чтобы установить счетчик ссылок на объекты.
Изменено в версии 3.10: Py_REFCNT() заменена на встроенную статическую
функцию.
Изменено в версии 3.11: тип параметра больше не является const PyObject*.
< /blockquote>
В случае Py_REFCNT() я считаю, что разумно возвращать нулевое значение, поскольку передача указателя на Py_REFCNT() не формирует автоматически дополнительную ссылку на базовый объект Python. Однако я не верю, что может быть случай, когда функция getrefcount() из модуля Python sys может возвращать ноль.
Я что-то упускаю очевидные или какие-то крайние случаи? Есть ли случай, когда sys.getrefcount() может возвращать ноль, как в настоящее время упоминается в документации? Было бы лучше, если бы кто-нибудь мог уточнить, что на самом деле означает выделенное жирным шрифтом предложение. Означает ли это, что возвращаемое значение 3 (довольно распространенный случай) sys.getrefcount() следует считать неточным?
Подробнее здесь: https://stackoverflow.com/questions/788 ... eturn-zero