Как на самом деле реализованы переменные в Python?

#python #variables #memory #reference

#python #переменные #память #ссылка

Вопрос:

Я очень смущен переменными Python. Я прочитал несколько глав из разных книг по переменным, и некоторые объяснения противоречивы, некоторые просто немного отличаются, но все же они отличаются. Некоторые используют визуальные объяснения, которые не обязательно полезны. Ниже приводится мое понимание, которое в основном представляет собой пересечения всех фактов из глав. Я ищу кого-нибудь, кто поправит меня, чтобы я мог положить этому конец. Я не могу спать. Помогите мне!

Понимание:

Все в Python является объектом. Каждое имя переменной (идентификатор) является ссылкой на объект.

Я думаю, что для ссылки вам нужно как минимум два таких блока памяти :

<address><content>

Идентификатор переменной связан с адресом первого блока памяти. Содержимое этого блока представляет собой соединение с адресом другого блока памяти, содержимое которого теперь может быть значением (простые типы данных) или другой, даже другой ссылкой (сложные типы данных).

Итак, на данный момент я думаю, что именно так работает ссылка в целом и в python.

В отличие от этого, я часто вижу, что для простых типов данных они отображаются таким образом, что содержимое первого блока уже является самим значением. Это соответствует моему пониманию примитивного типа данных в C.

Итак, может ли кто-нибудь, пожалуйста, навести порядок в моем ментальном хаосе?

Спасибо всем, что нашли время! Я действительно ценю это.

Ответ №1:

В CPython переменные получают доступ к своему значению, следуя указателю C типа PyObject *. Указатель указывает на структуру, которая может содержать значение напрямую или иметь другие указатели C на него. Первые несколько полей структуры содержат информацию о типе и определяют, как интерпретировать остальные.

После a = b обе переменные будут указывать на одну и ту же структуру.