真的很简单,但是我似乎找不到任何答案。我有一本字典,其中包含一堆我用来存储配置的其他字典。每个嵌套字典都是从相同的模板创建的,因此键是相同的。尝试在其中一个中设置键时,所有嵌套词典中的相同键都会使用该值进行更新。
这是我正在做的事情的一个例子。
my_dict = {
"bar": {
"baz": None,
"qux": None
},
"foo": {
"baz": None,
"qux": None
}
}
my_dict['foo']['baz'] = True
然后字典看起来像这样,我不明白为什么? 我确信我之前也做过这种事情,这就是为什么它令人困惑的原因。
{
"bar": {
"baz": True,
"qux": None
},
"foo": {
"baz": True,
"qux": None
}
}
编辑
嵌套字典是使用如下模板创建的:
temp = {'baz': None,
'qux': None}
my_dict['foo'] = temp
my_dict['bar'] = temp
任何帮助将不胜感激,谢谢
答案 0 :(得分:0)
您需要使用copy
方法来复制dict
类型而不将它们彼此关联:
my_dict = {}
temp = {'baz': None,
'qux': None}
my_dict['foo'] = temp.copy()
my_dict['bar'] = temp.copy()
print(my_dict)
my_dict['foo']['baz'] = True
print(my_dict)
输出:
{'bar': {'baz': None, 'qux': None},
'foo': {'baz': None, 'qux': None}}
{'bar': {'baz': None, 'qux': None},
'foo': {'baz': True, 'qux': None}}
注意:在这种情况下,您不需要两次调用.copy()
,因为您没有在代码的其他地方使用temp
。因此,只要您还有另一个使用.copy()
的字典,就可以更改其内容。
答案 1 :(得分:0)
发生问题是因为您将 product = await page.evaluate(() => {
let image = document.querySelector ("").src
});
和my_dict['foo']
指向同一个对象。因此,一旦更改了该对象,两者的值都将更改。
除了Ann拥有的字典之外,您还可以尝试使用此字典:
my_dict['bar']
my_dict = {}
temp = {'baz': None,
'qux': None}
my_dict['foo'] = dict(temp)
my_dict['bar'] = dict(temp)
print(my_dict)
my_dict['foo']['baz'] = True
print(my_dict)
创建一个新的字典对象。