2013-12-04 1 views
-1

Как не изменять значение списка ???Копирование изменяемых списков в python

>>> a=range(0,5) 
>>> b=10 
>>> c=a 
>>> c.append(b) 
>>> c 
[0, 1, 2, 3, 4, 10] 
>>> a 
[0, 1, 2, 3, 4, 10] 

До сегодняшнего дня я не знал, что списки в python являются изменяемыми!

+0

«Mutable» означает, что вы можете его изменить; 'c.append (b)' не будет работать, если списки не изменяются. Я думаю, вы просто не знали, что 'c = a' не создает новый список, отличный от того, на который ссылается' a'. – chepner

ответ

5

Followng заявление сделать c справка такой же список эта a ссылка.

c = a 

Чтобы сделать (неглубокий) копирование, использование ломтика обозначения:

c = a[:] 

или использовать copy.copy:

import copy 

c = copy.copy(a) 

>>> a = range(5) 
>>> c = a[:] # <-- make a copy 
>>> c.append(10) 
>>> a 
[0, 1, 2, 3, 4] 
>>> c 
[0, 1, 2, 3, 4, 10] 
>>> a is c 
False 
>>> c = a # <--- make `c` reference the same list 
>>> a is c 
True 
1

Вы делаете c ссылаются на тот же список как a. Таким образом, чтобы сделать неполную копию, используйте list()

>>> a = [1,2,3] 
>>> b = list(a) 
>>> b 
[1, 2, 3] 
>>> b.append(4) 
>>> a 
[1, 2, 3] 
>>> b 
[1, 2, 3, 4] 
>>> 
1

Вы можете преобразовать список в кортеж, который является непреложным список.

Dive into Python book:

Кортеж непреложный список. Кортеж не может быть изменен каким-либо образом после его создания.

Также

кортежи могут быть преобразованы в списки и наоборот. Встроенная функция tuple принимает список и возвращает кортеж с теми же элементами, а функция списка принимает кортеж и возвращает список. По сути, кортеж замерзает список, и список оттаивает кортеж.

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

  • Нет связанных вопросов^_^