2014-11-07 2 views
0

В Python 2.7, когда у меня есть два списка, и я удаляю элемент только из второго списка, почему элемент также удаляется из первого списка?Удалить или удалить элемент из аномалии списка

x1 = list() 
x2 = list() 
x1 = ['foo1', 'bar1', 'foo2', 'bar2'] 
x2 = x1 
x2.remove('foo1') 
del x2[x2.index('foo2')] 
print 'x1:\t', x1 
print 'x2:\t', x2 

Результат будет:

x1:  ['bar1', 'bar2'] 
x2:  ['bar1', 'bar2'] 

Кто-нибудь знает, почему?

ответ

3

Из-за этого заявления x2 = x1. Вы просто присваиваете x2 ту же ссылку, что и x1. Вам нужно явно скопировать. Что-то вроде этого:

x2 = x1[:] 

Если вы нашли это заявление странное, вы можете использовать это тоже:

x2 = list(x1) 
0

ой, переменная assingment и декларация в одном шаге ... Так это будет работать должным образом:

x1 = list() 
x1 = ['foo1', 'bar1', 'foo2', 'bar2'] 
x2 = list(x1) 
x2.remove('foo1') 
del x2[x2.index('foo2')] 
print 'x1:\t', x1 
print 'x2:\t', x2 

результат будет:

x1:  ['foo1', 'bar1', 'foo2', 'bar2'] 
x2:  ['bar1', 'bar2'] 

Хороший день!

+3

Вам не нужно 'x1 = list()'. Вы перепечатываете 'x1' в следующей строке. – Matthias

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