是否存在“中等”镜头这样的事情?或者:如何精细控制副本的“深度”?

时间:2016-11-07 18:58:02

标签: python python-2.7 dictionary deep-copy

我有一本字典。字典键是整数,值是 对象列表

我希望能够以这样的方式复制字典,以便我回溯到完全相同的对象,但不同的列表

当我使用普通副本时 - dict.copy()或copy.copy(dict) - 我对复制字典中的列表所做的任何更改也会更改原始字典的列表。

但是,当我使用copy.deepcopy(dict)时,它会一直运行并创建新对象,因此我不能将原始字典的列表用作“待办事项”,因为我删除了特定的来自复制的字典列表中的对象,或对复制的字典列表进行任何其他类型的更改,这些更改需要与原始对象进行比较。

“复制”模块(https://docs.python.org/2/library/copy.html)上的文档似乎没有提及任何类型的中间选项,或某种调整深度的方法。

是否存在这样的选项或功能?如果没有,我只是从错误的角度思考问题?例如,我想我可能能够实现所需的行为,如果我遍历字典并手动“复制”那样的东西(但这似乎相当冗长!?)。

3 个答案:

答案 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)停下来。