本质上我试图给嵌套字典赋值。如果我通过拼写出来构建词典,那么稍后分配一个值就可以按预期工作。但是,如果我创建了一个模板字典,请将其分配给所有键,然后再返回并尝试为嵌套键分配一个值,现在该键的每个实例都会获取该值。更方便地显示与代码:为嵌套字典分配值被不恰当地应用于所有键
initialize_dict = {'a':0,'b':0}
x = {}
x['FOO'] = initialize_dict
x['BAR'] = initialize_dict
y = {'FOO':{'a':0,'b':0},'BAR':{'a':0,'b':0}}
logging.info("x is {}".format(x))
logging.info("y is {}".format(y))
logging.info(x==y)
x['FOO']['a']=13231
y['FOO']['a']=13231
logging.info("new x is {}".format(x))
logging.info("new y is {}".format(y))
而且我的日志:
INFO:root:x is {'FOO': {'a': 0, 'b': 0}, 'BAR': {'a': 0, 'b': 0}}
INFO:root:y is {'FOO': {'a': 0, 'b': 0}, 'BAR': {'a': 0, 'b': 0}}
INFO:root:True
INFO:root:new x is {'FOO': {'a': 13231, 'b': 0}, 'BAR': {'a': 13231, 'b': 0}}
INFO:root:new y is {'FOO': {'a': 13231, 'b': 0}, 'BAR': {'a': 0, 'b': 0}}
正如你所看到的,由于某种原因,价值13231被分配以x为[“富”] [“一” ]和['BAR'] ['a']如果我使用模板构建它,但是如果我已经写出了完整的字典(以y开头)。我在上面进行测试以确保x和y在尝试赋值之前是真正等价的。
看initialize_dict的价值,你可能会感到惊讶。 –