当指定python字符串格式返回值如'67.67.%s.%s' % (str(j), str(i))
时,在指定字典的键和指定字典的子字典中的键之间不一致。
例如:
i = 0
j = 1
dict_template = {"id": "1", "another_dict": {"value": "hello"}}
dict_list = []
for idx in list(range(2, 1002)):
new_dict = copy.copy(dict_template)
new_dict['id'] = 'obj_id_%s' % str(idx)
new_dict['another_dict']['value'] = '67.67.%s.%s' % (str(j), str(i))
dict_list.append(new_dict)
if i < 254:
i += 1
else:
j += 1
i = 1
在这个例子中,每个new_dict ['another'] ['value']都是相同的字符串并具有相同的id。
但是,如果我将此行new_dict['another_dict']['value'] = '67.67.%s.%s' % (str(j), str(i))
更改为new_dict["another_dict"] = '67.67.%s.%s' % (str(j), str(i))
,则每个new_dict [“another_dict”]都会有不同的值。
顺便说一句,我使用的是Python 3.4.3。
答案 0 :(得分:1)
copy.copy
执行给定参数的浅拷贝。这意味着它会创建一个新的dict并为它添加引用(而不是副本)到第一个dict中已经存在的所有内容。对于字符串和数字等不可变的东西,没有问题。但是每个实例都指向相同的(可变的)内部字典。
相反,您需要使用copy.deepcopy
。它将以递归方式为模板参数的每个属性创建新副本。