Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的嵌套字典和更新键中的特定键_Python_Python 3.x - Fatal编程技术网

Python中的嵌套字典和更新键中的特定键

Python中的嵌套字典和更新键中的特定键,python,python-3.x,Python,Python 3.x,我试图在python中更新一个特定的键,但似乎所有相似的键都被更新了 internal_dict={'grade':无,'age':无,'genre':无} 外部命令={'Sam':内部命令,'Joe':内部命令,'Some':内部命令} 外部指令['Sam']['age']=10 我希望将此作为输出: {'Sam':{'grade':None,'age':10,'genre':None},'Joe':{'grade':None,'age':None,'genre':None},'Some':

我试图在python中更新一个特定的键,但似乎所有相似的键都被更新了

internal_dict={'grade':无,'age':无,'genre':无}
外部命令={'Sam':内部命令,'Joe':内部命令,'Some':内部命令}
外部指令['Sam']['age']=10
我希望将此作为输出:

{'Sam':{'grade':None,'age':10,'genre':None},'Joe':{'grade':None,'age':None,'genre':None},'Some':{'grade':None,'age':None,'genre':None}

但我有一个:

{'Sam':{'grade':None,'age':10,'genre':None},'Joe':{'grade':None,'age':10,'genre':None},'Some':{'grade':None,'age':10,'genre':None}


其中,所有孩子的年龄都更新为10岁,因为您使用相同的内部dict定义dict 3次,这三次都是对相同dict的引用;修改一个对象会修改所有三个对象。

必须复制对象,否则只有一个对象有三个引用

因此,解决方案是:
outer_dict={'Sam':internal_dict.copy(),'Joe':internal_dict.copy(),'Some':internal_dict.copy()}
发生这种情况是因为
internal_dict
是一个对象,而这三个对象都是对同一对象的引用。您可以通过使用
.copy()
方法强制python为每个条目创建新对象来解决此问题:

internal_dict={'grade':无,'age':无,'genre':无}
外部目录={'Sam':内部目录复制(),'Joe':内部目录复制(),'Some':内部目录复制()
外部指令['Sam']['age']=10