2015-11-01 3 views
3

Я только начинаю изучать и читать о Python и задаюсь вопросом, что у меня возникают проблемы с пониманием при чтении первых нескольких глав книги. Я наткнулся на это, играя с переводчиком.Python разные результаты кода

Вот мой вопрос, почему значения различаются в обоих этих выражениях. В первом примере значение y остается неизменным после изменения x, в то время как в следующем примере при изменении x оно также изменяет значение y.

Пример 1:

>>> x = 5 
>>> y = x 
>>> x += 1 
>>> x 
6 
>>> y 
5 

Пример: 2

>>> x = [5] 
>>> y = x 
>>> x[0] = 6 
>>> x 
[6] 
>>> y 
[6] 
+2

'x + 1' или' x + = 1'? (только совет, а не проблема) –

+1

Да, x + = 1 извините отредактировано. – user3400748

ответ

4

Его о python reference .При

a = [2] 
b = a 

Здесь a и b и ссылок на [2] .Вы можете проверить его по id

>>>id(a) 
3066750252L 

>>>id(b) 
3066750252L 

Оба являются одинаковыми идентификаторами. Так a.append или b.append будет влиять как a и b .То есть [2] .Это в случае mutable objects.So a[0]=6 будет влиять на b also.In случай целых, это не повлияет, поскольку, int является immutable object.So

>>>a = 2 
>>>id(a) 
164911268 
>>>a = a + 1 
>>>a 
3 
>>>id(a) 
164911256 

Здесь id changed.That означает новый объект int создается 3 .Это теперь ссылается на переменную a.

Надеется, что это помогает

3

Значения этих два объектов в вопросе отличается, один, то int является неизменны, а с другой стороны, list изменчиво.

Назначив оба названия x, y к 5 создать два различных имена для того же значения 5. При выполнении операции:

In [1]: x = y = 5 

In [2]: x = x + 1 

In [3]: x 
Out[3]: 6 

In [4]: y 
Out[4]: 5 

x+1возвращает новый объектint, потому что вы не можете изменить значение в междунар.

list виды с другой стороны являются изменяемыми. Поэтому, когда вы создаете два имени, которые ссылаются на один и тот же список, а затем меняют значение его содержимого с назначением через x[0] = 1, он просто влияет на список, на который ссылается x, и не создает новый список.Таким образом, результаты этого задания могут видеть y тоже, потому что они ссылаются на один и тот жеизменяемого объекта:

In [11]: x = y = [5] 

In [12]: x[0] = 1 

In [13]: x 
Out[13]: [1] 

In [14]: y 
Out[14]: [1] 

Обратите внимание, что добавление x = x + [1] создаст новый список, что вы делаете с x[0]=1 просто изменение содержимого. Взгляните на презентацию this для более полного покрытия.

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