Что такое PyObject в Python?

Укороченная версия

Недавно я столкнулся с некоторым кодом Python, в котором возвращаемый тип для функции был указан как PyObject в документации. Что такое PyObject?

Подробная версия

Я не программист C/C++, но когда я столкнулся с PyObject в документации, приведенной выше, Google научил меня, что PyObject - это объект Python, определенный с помощью API Python/C. В частности, документация API определяет PyObject следующим образом:

Все типы объектов являются расширениями этого типа. Это тип, который содержит информацию, на которую Python должен обрабатывать указатель на объект как объект. В обычной сборке "release" он содержит только счет ссылок объектов и указатель на соответствующий объект типа. Он соответствует полям, определяемым расширением макроса PyObject_HEAD.

Честно говоря, я не совсем понимаю это или отвечает на мой основной вопрос, но это не заставляет меня думать, что, очевидно, неправильно думать о PyObject как о объекте Python, о полной остановке. С другой стороны, возможно, чтобы технически считать PyObject тип должен был быть создан как расширение стандартного Python с использованием API Python/C. Например, является целым числом PyObject?

Потенциально релевантные ссылки

http://docs.scipy.org/doc/numpy/reference/c-api.types-and-structures.html

Ответ 1

Каждое значение, которое вы можете коснуться в Python, это PyObject в C. Это включает списки, словари, сокеты, файлы, целые числа, строки, функции, классы, которые вы называете. Если вы можете коснуться его в Python, его PyObject в C.

Ответ 2

PyObject на самом деле является просто объектом Python на уровне C. А так как целые числа в Python являются объектами, они также являются PyObject s. Неважно, написано ли это на Python или в C, это PyObject на уровне C независимо.