2015-02-18 3 views
0

Мой код:Python 3.4 Что это за список?

L = [1, 2, 3, 4] 
L2 = L 
L2[2] = 'a' 
L 

это дает мне:

[1, 2, 'a', 4] 

может кто-нибудь объяснить мне, пожалуйста, когда я работал с L2, почему L изменились?

+0

Потому что вы не сделали копию списка. –

+1

'L2' и' L' оба имеют одинаковый список; вы просто связываете это с двумя переменными. – khelwood

ответ

3

L и L2 обратитесь к той же ячейке памяти.

Выполните следующий пример того, как скопировать переменную списка в другую переменную.

>> x = [1,2,3] 
>>> id(x) 
141910924 
>>> y = x 
>>> id(y) 
141910924 
>>> z = list(x) 
>>> id(z) 
141676844 
>>> x.append(10) 
>>> x 
[1, 2, 3, 10] 
>>> y 
[1, 2, 3, 10] 
>>> z 
[1, 2, 3] 

использовать copy и deepcopy, когда мы хотим присвоить значения списка другим переменным, например.

>>> import copy 
>>> x = [1,2,3, [4,5]] 
>>> y = copy.copy(x) 
>>> id(x) 
141913324 
>>> id(y) 
139369964 
>>> x.append(10) 
>>> x 
[1, 2, 3, [4, 5], 10] 
>>> y 
[1, 2, 3, [4, 5]] 
>>> x[3].append(20) 
>>> x 
[1, 2, 3, [4, 5, 20], 10] 
>>> y 
[1, 2, 3, [4, 5, 20]] 
>>> z = copy.deepcopy(x) 
>>> z 
[1, 2, 3, [4, 5, 20], 10] 
>>> x[3].append(50) 
>>> x 
[1, 2, 3, [4, 5, 20, 50], 10] 
>>> z 
[1, 2, 3, [4, 5, 20], 10]