2014-10-24 2 views
0

х = 3
х = 4Назначение Python или привязка переменных?

ли вторая строка оператор присваивания или новый переменное связывание?

+1

«переменная привязка» - это причудливые слова для «присваивания переменной [..]». – user2864740

+1

Можете ли вы объяснить, что вы думаете, что означает «присваивание» и «привязка к новой переменной»? – BrenBarn

+0

Я имею в виду то, что python мутирует значение переменной x или бросает первый x, создает новую переменную и связывает новое значение с ней. – Amen

ответ

2

В (очень простые) условия 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» в любом случае.

2

Нет никакой разницы. Присвоение имени в Python одинаково независимо от того, существовало ли это имя.

Смежные вопросы