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



我对list.append()有一个奇怪的问题。我构建了一个列表,将字典中的一些值连接起来,如下所示:

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']}

我不明白为什么In [6]中的append后面修改了myDict(参见In [2]Out [8]的区别)

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

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

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

最新更新