Связь между ссылками, переменными и идентификаторами [закрыто]Python

Программы на Python
Ответить
Anonymous
 Связь между ссылками, переменными и идентификаторами [закрыто]

Сообщение Anonymous »

Мне не удалось найти определения терминов «ссылка», «переменная» и «идентичность» ни в глоссарии Python, ни в моем учебнике. Я хотел бы уточнить свое понимание этих терминов. Допустим, у нас есть объект obj. Верно ли, что следующие фразы являются синонимами в CPython:
  • "ссылка на obj", "идентификатор obj", "адрес памяти объекта" ?
  • "переменная", "именованная ссылка", "идентификатор, привязанный к некоторой ссылке" ?
    < li>"переменная a, которая ссылается на obj", "пара, состоящая из идентификатора a, идентификатора obj" ? >
P.S. Марк Лутц в своей книге «Изучение Python» (5-е изд.) на стр. 177 говорит следующее:

Читатели, имеющие опыт работы с C, могут найти ссылки на Python. аналогично указателям C (адресам памяти). Фактически, ссылки реализованы как указатели (в CPython) и часто выполняют ту же роль, особенно с объектами, которые можно изменять на месте (подробнее об этом позже). . Однако, поскольку при использовании ссылки всегда автоматически разыменовываются, вы никогда не сможете сделать с самой ссылкой что-либо полезное; это функция, которая устраняет обширную категорию ошибок C. Но вы можете думать о ссылках Python как об указателях C «void*», которые автоматически отслеживаются при каждом использовании.

Используя эту информацию и ответы ниже, я пришел к моему нынешнему пониманию, которое заключается в следующем:
I. Все выражения в Python (или, по крайней мере, большинство из них) возвращают ссылку на object.

II. Как правило, Python не определяет внутреннюю структуру ссылки. Но в реализации CPython ссылки реализованы как объекты C (

Код: Выделить всё

PyObject*указатели 
), которые очень похожи на указатели void*, которые автоматически отслеживаются при каждом использовании. Такая ссылка не является объектом Python, но она содержит фактический адрес памяти "

Код: Выделить всё

PyObject
C struct", которая соответствует некоторому объекту Python. Я думаю, что этот адрес памяти равен идентификатору этого объекта Python (именно так ссылка и идентификатор связаны в CPython).

III. Переменная Python — это идентификатор, привязанный к ссылке, т. е. следующие фразы эквивалентны ( — объект Python): «переменная a, которая ссылается на obj» и «пара, состоящая из идентификатора a, ссылки на obj". Переменная не является объектом Python, поскольку ссылка не является объектом Python. Обратите внимание, что не все ссылки являются переменными в Python.

IV. В начале этого сообщения пункт 1 частично неверен, поскольку «ссылка на obj» не является то же самое, что «идентичность объекта obj» (в CPython ссылка — это указатель C, тогда как идентификатор — это просто целое число). Пункт 2 верен. Пункт 3 неверен (правильный вариант см. в п.III выше).

Подробнее здесь: https://stackoverflow.com/questions/790 ... identities
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»