字典下的字典是否按值复制而不是通过引用复制?

时间:2013-12-03 06:38:20

标签: python dictionary

在开始时,我创建了xls_dictxml_dict

然后将上述2个词组包含在字典的创建中。 (我虽然是复制参考)

所以我将把json文件加载到2个dicts中。

但是,当我退出

时,我发现了

for export_file, data_dict in json_files.iteritems():阻止。

xls_dictxml_dict未更改。

这不是我的期望。

我误解了哪里?感谢

    xls = MultiLangXls(xls_path, XLS_COLUMN)
    xls_dict = xls.load()
    xml = MultiLangXML(xml_path)
    xml_dict = xml.load()

    json_files={
        "xls.json": xls_dict,
        "xml.json": xml_dict
    }

    for export_file, data_dict in json_files.iteritems():
        if os.path.isfile(export_file):
            pass
        else: # If json file not exists, then ouput the dict into json file
            with open( export_file , 'w') as f:
                json.dump(data_dict, f, encoding="utf-8")
        load_file = open(export_file).read().decode("utf-8-sig")
        data_dict = {}
        data_dict = json.loads( load_file ) 

3 个答案:

答案 0 :(得分:2)

data_dict变量确实引用同一个对象而不是副本。但是,将新的字典分配给data_dict会将变量与该对象断开连接并为其分配一个全新的字体。

要清除现有的 dict,并用新内容填充它,你想写下这样的东西:

data_dict.clear()
data_dict.update(json.loads(load_file))

答案 1 :(得分:0)

您正在将data_dict重新分配给新的字典对象。

请参阅Passing values in Python

答案 2 :(得分:0)

问题在这里:

data_dict = {} #You create new empty dictionary
# And rewrite it. But old dictionare are not cleaned.
data_dict = json.loads( load_file ) 

您必须按data_dict.clean()

清理