- "ссылка на obj", "идентификатор obj", "адрес памяти объекта" ?
- "переменная", "именованная ссылка", "идентификатор, привязанный к некоторой ссылке" ?
< li>"переменная a, которая ссылается на obj", "пара, состоящая из идентификатора a, идентификатора obj" ? >
Читатели, имеющие опыт работы с C, могут найти ссылки на Python. аналогично указателям C (адресам памяти). Фактически, ссылки реализованы как указатели (в CPython) и часто выполняют ту же роль, особенно с объектами, которые можно изменять на месте (подробнее об этом позже). . Однако, поскольку при использовании ссылки всегда автоматически разыменовываются, вы никогда не сможете сделать с самой ссылкой что-либо полезное; это функция, которая устраняет обширную категорию ошибок C. Но вы можете думать о ссылках Python как об указателях C «void*», которые автоматически отслеживаются при каждом использовании.
Используя эту информацию и ответы ниже, я пришел к моему нынешнему пониманию, которое заключается в следующем:
I. Все выражения в Python (или, по крайней мере, большинство из них) возвращают ссылку на object.
II. Как правило, Python не определяет внутреннюю структуру ссылки. Но в реализации CPython ссылки реализованы как объекты C (
Код: Выделить всё
PyObject*указатели Код: Выделить всё
PyObjectIII. Переменная Python — это идентификатор, привязанный к ссылке, т. е. следующие фразы эквивалентны (
Код: Выделить всё
objIV. В начале этого сообщения пункт 1 частично неверен, поскольку «ссылка на obj» не является то же самое, что «идентичность объекта obj» (в CPython ссылка — это указатель C, тогда как идентификатор — это просто целое число). Пункт 2 верен. Пункт 3 неверен (правильный вариант см. в п.III выше).
Подробнее здесь: https://stackoverflow.com/questions/790 ... identities
Мобильная версия