我正在编写一个Python代码,动态创建字典,将其初始化为引用字典,并修改字典中的特定值。但是,我发现不仅我得到了意想不到的结果,而且参考词典也得到了修改。 我的代码:
tdict={'a':'1','b':'2','c':'3'}
newdict={}
for i in range(5):
newdict['name'+str(i)]=tdict
newdict['name'+str(i)]['a']='value'+str(i)
print 'tdict: ',tdict
print 'newdict: ',newdict
结果是:
tdict: {'a': 'value0', 'c': '3', 'b': '2'}
tdict: {'a': 'value1', 'c': '3', 'b': '2'}
tdict: {'a': 'value2', 'c': '3', 'b': '2'}
tdict: {'a': 'value3', 'c': '3', 'b': '2'}
tdict: {'a': 'value4', 'c': '3', 'b': '2'}
newdict: {'name4': {'a': 'value4', 'c': '3', 'b': '2'}, 'name2': {'a': 'value4', 'c': '3', 'b': '2'}, 'name3': {'a': 'value4', 'c': '3', 'b': '2'}, 'name0': {'a': 'value4', 'c': '3', 'b': '2'}, 'name1': {'a': 'value4', 'c': '3', 'b': '2'}}
而我希望我的“新词”是这样的:
newdict: {'name4': {'a': 'value4', 'c': '3', 'b': '2'}, 'name2': {'a': 'value2', 'c': '3', 'b': '2'}, 'name3': {'a': 'value3', 'c': '3', 'b': '2'}, 'name0': {'a': 'value0', 'c': '3', 'b': '2'}, 'name1': {'a': 'value1', 'c': '3', 'b': '2'}}
有人能帮我弄清楚为什么会这样吗?另外,为什么引用字典'tdict'在我没有给它赋值的情况下会发生变化?你知道吗
提前谢谢
您正在
newdict
字典的每个值中存储对tdict
的引用:然后修改
tdict
的键'a'
,方法是您可能希望在newdict字典中存储
tdict
的副本:通过将现有字典用作构造函数参数来创建新字典将创建一个浅表副本,您可以在其中为现有键分配新值。您不能(或不希望)修改此字典中的可变值。示例:
如果要修改字典中的可变值,则需要创建深度副本:
只是因为你引用的是tdict而不是副本。为了复制你可以使用
或者
希望有帮助
相关问题 更多 >
编程相关推荐