Python 尽管我使用DICT(默认DICT)初始化其他DICT,为什么我的默认DICT仍然会更改?

Python 尽管我使用DICT(默认DICT)初始化其他DICT,为什么我的默认DICT仍然会更改?,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我想要一本永不改变的python字典 在下面的代码中,我希望默认值不会更改: DEFAULT\u DICT={ "历史":{ 'id':[] } } my_dict=dict(默认值) 打印(“我的字典是{}”。格式(我的字典)) 打印(“默认值为{}”。格式(默认值)) 我的字典['history']['id'].附加(“toto”) 打印(“我的字典是{}”。格式(我的字典)) 打印(“默认值为{}”。格式(默认值)) 有人能告诉我为什么默认值会根据我的默认值而变化吗 我在想这个用途 my

我想要一本永不改变的python字典

在下面的代码中,我希望默认值不会更改:

DEFAULT\u DICT={
"历史":{
'id':[]
}
}
my_dict=dict(默认值)
打印(“我的字典是{}”。格式(我的字典))
打印(“默认值为{}”。格式(默认值))
我的字典['history']['id'].附加(“toto”)
打印(“我的字典是{}”。格式(我的字典))
打印(“默认值为{}”。格式(默认值))
有人能告诉我为什么默认值会根据我的默认值而变化吗

我在想这个用途

my\u dict=dict(默认值)

将更正问题,但不会。

当您编写
my\u dict=dict(DEFAULT\u dict)
时,创建了DEFAULT\u dict的浅拷贝,但您需要此对象的深拷贝

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

从复制导入deepcopy
默认值_DICT={
"历史":{
'id':[]
}
}
my_dict=deepcopy(默认_dict)
打印(“我的字典是{}”。格式(我的字典))
打印(“默认值为{}”。格式(默认值))
我的字典['history']['id'].附加(“toto”)
打印(“我的字典是{}”。格式(我的字典))
打印(“默认值为{}”。格式(默认值))

有关浅拷贝和深拷贝的更多信息,请遵循此操作。

使用。主题外:我建议您阅读并开始遵循中描述的命名约定。