х = 3
х = 4Назначение Python или привязка переменных?
ли вторая строка оператор присваивания или новый переменное связывание?
х = 3
х = 4Назначение Python или привязка переменных?
ли вторая строка оператор присваивания или новый переменное связывание?
В (очень простые) условия C, когда вы присвоить новое значение переменной этого является то, что происходит:
x = malloc(some object struct)
Если я правильно интерпретировать ваш вопрос, вы спрашиваете, что происходит, когда вы переназначить x
- это:
A. *x = some other value
или это:
B. x = malloc(something else)
правильный ответ это B
, потому что объект, на который указывает переменная, может также упоминаться где-то еще, а его изменение может повлиять на другие части программы непредсказуемым образом. Таким образом, Python распаковывает имя переменной из старой структуры (уменьшает свой «счетчик ссылок»), выделяет новую структуру и связывает имя с этим новым. Когда контрольный счетчик структуры становится нулевым, он становится мусором и в какой-то момент будет освобожден.
Конечно, этот рабочий процесс сильно оптимизирован внутри, и детали могут варьироваться в зависимости от самого объекта, конкретного интерпретатора (CPython, Jython и т. Д.) И от версии к версии. Как пользовательские программы питона программистов, у нас есть только гарантия того, что
x = old_object
, а затем
x = new_object
не влияет на «old_object» в любом случае.
Нет никакой разницы. Присвоение имени в Python одинаково независимо от того, существовало ли это имя.
«переменная привязка» - это причудливые слова для «присваивания переменной [..]». – user2864740
Можете ли вы объяснить, что вы думаете, что означает «присваивание» и «привязка к новой переменной»? – BrenBarn
Я имею в виду то, что python мутирует значение переменной x или бросает первый x, создает новую переменную и связывает новое значение с ней. – Amen