2015-10-23 5 views
1

У меня странная проблема с list.append(). Я строй списка соединяющий несколько значений из Словаря следующим образом:Почему list.append (obj) изменяет obj в Python?

In [3]: myDict = {'k1': u'value1', 'k2': [u'value2']} 

In [4]: myList = myDict['k2'] 

In [5]: myList 
Out[5]: [u'value2'] 

In [6]: myList.append(myDict['k1']) 

In [7]: myList 
Out[7]: [u'value2', u'value1'] 

In [8]: myDict 
Out[8]: {'k1': u'value1', 'k2': [u'value2', u'value1']} 

Я не понимаю, почему myDict модифицирован после append в In [6] (увидеть разницу между In [2] и Out [8]).

+2

Потому что они относятся к одному и тому же объекту. –

+1

Becuase myDict и myDict ['k2'] _refer в тот же список_. – RemcoGerlich

+1

'myList is myDict ['k2']' - лучший вопрос может быть *, почему вы ожидали чего-то еще? * – jonrsharpe

ответ

3

Потому что, когда вы назначаете myDict['k2'] к myList вы на самом деле просто создать указатель, myList, к значению с ключом k2 в myDict. Вам нужно создать копию myDict['k2'], иначе вы просто измените оригинал.

Пробег: myList = list(myDict['k2']).

2

myDict[k2] - указатель на объект списка. Затем вы устанавливаете myList на тот же объект списка. , когда вы изменяете список, все указатели, указывающие на него, видят измененный.

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