为什么尽管我使用 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)

会纠正问题,但不会。


SMILET
浏览 139回答 1
1回答

largeQ

当您编写my_dict = dict(DEFAULT_DICT)DEFAULT_DICT 的浅拷贝时,会产生问题,但您需要该对象的深层拷贝。要解决您的问题,您可以使用模块中的deepcopy功能copy:from copy import deepcopyDEFAULT_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))有关浅拷贝和深拷贝的更多信息,请点击此链接。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python