为什么list.append(obj)在Python中修改obj?

时间:2015-10-23 11:22:41

标签: python

我对list.append()有一个奇怪的问题。我建立了一个列表,连接dict中的一些值,如下所示:

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 个答案:

答案 0 :(得分:3)

因为当您将myDict['k2']分配给myList时,您实际上只是在myList中使用键k2创建指针myDict。您需要创建myDict['k2']的副本,否则您只需修改原始文件。

尝试myList = list(myDict['k2'])

答案 1 :(得分:2)

myDict[k2]是指向列表对象的指针。 然后,将myList设置为指向同一列表对象。 修改列表时,指向它的所有指针都会看到修改后的列表。