Понимание терминологии адреса памяти, значения и переменной в Python противоречит интуиции.

Мне нужно представить компьютерную память как множество отдельных слотов для хранения. Каждое местоположение уникально и может использоваться для хранения значения. Эти уникальные слоты называются адресами памяти.

Переменные - это способ отслеживать значения, хранящиеся в памяти компьютера. Переменная - это именованное место в памяти компьютера. Python хранит переменные в отдельном списке от значений. Переменная будет содержать адрес памяти, и этот адрес памяти содержит значение. Затем переменная ссылается на значение. Мне нужно помнить, что вместо значения переменная ссылается только на адрес памяти. Однако мне не нужно беспокоиться о выделении адреса, Python выберет адреса памяти.

А вот и сложная часть системы хранения. Это немного отличает вычисления от повседневной математики. Когда Python принимает X = a, здесь есть три информации. X - переменная. Он содержит информацию об адресе памяти. Допустим, это адрес id123. Id123 относится к значению «a», которое хранится в этом адресе памяти. Когда я назначил X новому значению Y, я фактически назначил адрес памяти id123 для Y. Теперь я переназначил list [4, 5, 6] для X. Вместо изменения значения в id123, X теперь ссылается на другой адрес памяти. . Допустим, новый адрес памяти - id456, для простоты обсуждения. Id456 хранит список [4, 5, 6]. Хотя я сначала создаю y на основе X, Y относится к id123, а не к переменной X или значению [1, 2, 3]. Следовательно, Y по-прежнему относится к [1, 2, 3]

В следующем случае я повторил тот же шаг, что и в предыдущем случае. Я назначаю X = [1, 2, 3] (допустим, он все еще находится в id123), а затем Y = X. Вместо переназначения X я теперь меняю X. В этом случае X по-прежнему ссылается на id123, а значение в id123 изменяется. Следовательно, и X, и Y имеют одно и то же новое значение. не имеет значения, написал ли я Y [2] = 4 или X [2] = 4

Когда две переменные, такие как X и Y в моем примере, относятся к одним и тем же объектам, они являются псевдонимами. Если этот список будет изменен, обе переменные увидят изменение. Однако, если я переназначу одну из переменных, они перестанут быть псевдонимами. После этого изменение затронет только целевую переменную.

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