python - 为什么尽管我使用 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)
会纠正问题,但不会。
解决方案
当您编写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))
有关浅拷贝和深拷贝的更多信息,请点击此链接。
推荐阅读
- swift - 处理保护块中的异常
- css - 猫头鹰旋转木马在网格区域内移动导航箭头
- python - Python for 循环只运行一次?
- database - 行动项目访问数据库接口
- if-statement - Gekko - if3() 语句用于在 ODE 中的两个表达式之间进行选择
- pine-script - Pine-Script:使用变量的历史数据时 plot() 不起作用
- sequelize.js - Sequelize 范围内的 BelongsTo / HasMany 无法包含
- django - 生产中的 mod_wsgi 设置无法启动
- html - css父位置随子高度变化而变化
- javascript - 如何删除“输入类型文件文本字段”