首页 > 解决方案 > 为什么尽管我使用 dict(DEFAULT_DICT) 来初始化其他字典,但我的 DEFAULT_DICT 仍然会发生变化?

问题描述

我想要一个永远不会改变的python字典。

在下面的代码中,我希望 DEFAULT_DICT 不会被更改:

DEFAULT_DICT = {
    'history':{
        'id':[]
    }
}

my_dict = dict(DEFAULT_DICT)
print("my_dict is {}".format(my_dict))
print("DEFAULT_DICT is {}".format(DEFAULT_DICT))

my_dict['history']['id'].append("toto")
print("my_dict is {}".format(my_dict))
print("DEFAULT_DICT is {}".format(DEFAULT_DICT))

有人可以告诉我为什么 DEFAULT_DICT 会根据 my_dict 发生变化吗?

我在想那个用途

my_dict = dict(DEFAULT_DICT)

会纠正问题,但不会。

标签: pythonpython-3.xdictionary

解决方案


当您编写my_dict = dict(DEFAULT_DICT)DEFAULT_DICT 的浅拷贝时,会产生问题,但您需要该对象的深层拷贝。

要解决您的问题,您可以使用模块中的deepcopy功能copy

from copy import deepcopy

DEFAULT_DICT = {
    'history': {
        'id': []
    }
}

my_dict = deepcopy(DEFAULT_DICT)
print("my_dict is {}".format(my_dict))
print("DEFAULT_DICT is {}".format(DEFAULT_DICT))

my_dict['history']['id'].append("toto")
print("my_dict is {}".format(my_dict))
print("DEFAULT_DICT is {}".format(DEFAULT_DICT))

有关浅拷贝和深拷贝的更多信息,请点击此链接


推荐阅读