我有一本字典。字典键是整数,值是 对象列表 。
我希望能够以这样的方式复制字典,以便我回溯到完全相同的对象,但不同的列表。
当我使用普通副本时 - dict.copy()或copy.copy(dict) - 我对复制字典中的列表所做的任何更改也会更改原始字典的列表。
但是,当我使用copy.deepcopy(dict)时,它会一直运行并创建新对象,因此我不能将原始字典的列表用作“待办事项”,因为我删除了特定的来自复制的字典列表中的对象,或对复制的字典列表进行任何其他类型的更改,这些更改需要与原始对象进行比较。
“复制”模块(https://docs.python.org/2/library/copy.html)上的文档似乎没有提及任何类型的中间选项,或某种调整深度的方法。
是否存在这样的选项或功能?如果没有,我只是从错误的角度思考问题?例如,我想我可能能够实现所需的行为,如果我遍历字典并手动“复制”那样的东西(但这似乎相当冗长!?)。
答案 0 :(得分:3)
您可以实现自己的“中型”版本:
$viewValue
Python 3版本:
typeahead="result.name for result in results | filter:{name: $viewValue}"
答案 1 :(得分:1)
您需要创建list
s的副本(对dict
有价值)。即使没有copy.copy()
,您也可以这样做。
new_list = list(old_list)
将创建具有相同内容的copy
old_list
,并将其存储为new_list
。
因此,您创建新词典的 dict comprehension 表达式应为:
new_dict = {k: list(v) for k, v in my_dict.items()}
my_dict
是你的原始词典。
答案 2 :(得分:0)
您可以创建dict
的子类,将__deepcopy__
方法实现为浅层副本,并在您希望深度复制的级别使用该子类(而不是本机dict
)停下来。