嵌套字典,如何避免通过引用传递?

时间:2017-01-05 16:22:45

标签: python dictionary

我通过循环构建嵌套字典的字典,如下所示:

statistics = {'kpi_0': 0, 'kpi_1': 0}

my_dict = {'0':statistics, '1': statistics, ... }

当然,如果我修改一个元素my_dict['0']['kpi_0'] += 1,我会影响my_dict的所有元素。

有一种简单的方法可以避免这种行为吗?例如,我可以保存my_dict的文字版本并构建new_dict = dict("""literal version of my_dict""")吗?

1 个答案:

答案 0 :(得分:5)

使用deepcopy

>>> from copy import deepcopy
>>> statistics = {'kpi_0': 0, 'kpi_1': 1}
>>> my_dict = {'0': deepcopy(statistics), '1': deepcopy(statistics)}

>>> my_dict
{'1': {'kpi_1': 1, 'kpi_0': 0}, '0': {'kpi_1': 1, 'kpi_0': 0}}
>>> my_dict['1']['kpi_0'] += 1
>>> my_dict
{'1': {'kpi_1': 1, 'kpi_0': 1}, '0': {'kpi_1': 1, 'kpi_0': 0}}

请记住,您不能在字典中使用2个具有相同名称的键。