【发布时间】:2014-02-04 11:03:34
【问题描述】:
考虑下面的代码
#! /usr/bin/env python
my_dict = {1:['Bernd','das','Brot'], 2:['Chili','das','Schaf'], 3:['Briegel','der','Busch']}
print my_dict
chili = my_dict[2]
print chili
del chili[2]
print chili
print my_dict
使用我的 Python 2.7.5 产生以下输出:
{1: ['Bernd', 'das', 'Brot'], 2: ['Chili', 'das', 'Schaf'], 3: ['Briegel', 'der', 'Busch']}
['Chili', 'das']
{1: ['Bernd', 'das', 'Brot'], 2: ['Chili', 'das'], 3: ['Briegel', 'der', 'Busch']}
如您所见,dict 中的列表也被操纵,因此它们似乎指向内存中的相同对象/事物。
也许我在这里理解了一个错误的基本 Python 原则(请随意抨击并将我指向规范),但这是预期的行为吗?如果是的话,有没有办法在不操纵原始字典的情况下从字典中删除和按索引输入?我经常发现已经有一种非常简单的 Python 方法可以完成我尝试使用复杂代码结构完成的工作。
我这里有一个很大的字典,我经常从中取出列表,我不想在每次以任何方式处理列表时都重建字典。
非常感谢您的时间和帮助,
托比亚斯
【问题讨论】:
-
是的,这是一种预期行为,要获取列表的副本,请使用切片或
copy.deepcopy。 -
这里的误解是您实际上根本没有从字典中“获取”列表;你只是给了它一个额外的名字。
标签: python list dictionary del