Как называется список, который делает список с переменной x, чтобы предотвратить привязку к каким-либо изменениям исходного значения x? Экранирование? Общая структура? Привязка списка? Ничего не возвращается из поиска Google с использованием этих терминов.
Поскольку список не ничего не делает и не является свойством коллекций.
В Python переменные - это имена.
>>> x = 5
Это означает: x
должно быть именем для значения 5
.
>>> l = [x]
Это означает: l
должно быть именем для значения, которое получается в результате взятия значения, которое x
names (5
), и создания списка из одного элемента с этим значением ([5]
).
>>> x += 1
x += 1
здесь переписывается в x = x + 1
, потому что целые числа неизменны. Вы не можете заставить значение 5
увеличиваться на 1, потому что тогда оно будет 5
больше.
Таким образом, это означает: x
перестанет быть именем для того, что он в данный момент называет, и начнет называться значением для значения, которое следует из математического выражения x + 1
. Т.е. 6
.
Вот как это происходит с эталонной семантикой. Нет оснований ожидать, что содержимое списка изменится.
Теперь давайте посмотрим, что происходит с семантикой значений, в гипотетическом языке, который выглядит точно так же, как Python, но обрабатывает переменные так же, как они обрабатываются в C.
>>> x = 5
Теперь это означает: x
- это метка для фрагмента памяти, который содержит представление числа 5
.
>>> l = [x]
Теперь это означает: l
- это метка для фрагмента памяти, который содержит некоторую структуру списка (возможно, включая некоторые указатели и тому подобное), который будет каким-либо образом инициализирован, так что он представляет список с 1 элементом, что имеет значение 5
(скопировано из переменной x
). Нельзя заставить логически содержать x
, поскольку это отдельная переменная, и у нас есть семантика значений; поэтому мы храним копию.
>>> x += 1
Теперь это означает: увеличить число в переменной x
; сейчас это 6
. Список, опять же, не затронут.
Независимо от вашей семантики, вы не можете таким образом влиять на содержимое списка. Ожидать, что содержимое списка изменится, означает, что он не соответствует вашим интерпретациям. (Это становится более очевидным, если переписать код на l = [5]; x = l[0]; x += 1
.)