Несколько имен относятся к одной проблеме значения - PullRequest
0 голосов
/ 22 июня 2019

Я недавно прочитал эту ссылку здесь и это поднимает вопрос. Автор только сказал об этом

x = 23
y = x

А как же это

x = 23
y = 23

Верно ли, что и x, и y относятся к одному значению 23? первая «23» такая же, как вторая «23»? Если это так, то почему я пытаюсь это

a=[1,2,3]
b=[1,2,3]
b.reverse()
print(a)

Результат

[1, 2, 3]

Почему это? потому что и a, и b ссылаются на значение [1,2,3], а list является изменяемым типом. Как сказал автор «если два имени ссылаются на одно и то же значение, а значение изменено, то оба имени видят изменения» В моем коде b изменилось, почему a не

1 Ответ

1 голос
/ 22 июня 2019

Создание совершенно нового list дважды не создает ситуацию наложения имен. Создание любого изменяемого типа дважды с нуля не приведет к появлению псевдонимов. Ваши a и b имеют одинаковое содержимое, но это два совершенно разных list с.

Ссылочный интерпретатор CPython будет время от времени кэшировать малые / простые неизменные типы (малые int s, пустые tuple и str и т. Д.), Так что вы могли бы обнаружим, что все, что инициализировано в 23, инициализируется в то же самое 23, но это детали реализации, которые редко имеют значение на практике. По сути, до тех пор, пока вы не назначаете одно имя из уже существующего существующего объекта (и не делаете более хитрых вещей, таких как умножение последовательностей или изменяемые аргументы по умолчанию), псевдонимы не встречаются ни в каких опасных чувство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...