当我生成一个dict并将其添加到列表中,然后生成具有类似结构的第二个dict并将其附加到该列表时,结果列表是第二个dict的两个副本,而不是包含两个dict的列表。第一和第二个词。
我的代码:
i=1
UnitTabs = {}; TextUnits=[]
theseTextUnits = {}
theseTextUnits['documentId'] = i
theseTextUnits['xPosition'] = 200; theseTextUnits['yPosition'] = 200; theseTextUnits['name'] = 'From date'
TextUnits.append(theseTextUnits)
theseTextUnits['xPosition'] = 250; theseTextUnits['yPosition'] = 250; theseTextUnits['name'] = 'To date'
TextUnits.append(theseTextUnits)
print(TextUnits)
预期产出:
[{'xPosition': 200, 'yPosition': 200, 'name': 'From date', 'documentId': 1},
{'xPosition': 250, 'yPosition': 250, 'name': 'To date', 'documentId': 1}]
实际输出:
[{'xPosition': 250, 'yPosition': 250, 'name': 'To date', 'documentId': 1},
{'xPosition': 250, 'yPosition': 250, 'name': 'To date', 'documentId': 1}]
答案 0 :(得分:1)
这是因为您正在修改相同的dict实例:
theseTextUnits['name'] = 'To date'
而且,这也将改变原始字典中的值。你需要做的是复制字典,然后修改你想要的值。
import copy
newDict = copy.deepcopy(theseTextUnits)
newDict['xPosition'] = 250
newDict['yPosition'] = 250
newDict['name'] = 'To date'
TextUnits.append(newDict)
答案 1 :(得分:0)
这里发生的是你正在编辑同一个字典。 Python从不隐式复制对象。如果您使用copy
方法,它将解决问题
TextUnits.append(theseTextUnits.copy())
答案 2 :(得分:0)
Python中的字典是可变对象。这意味着可以更改实际值(而不是返回新对象)
例如:
a={1:1}
b=a
b[1]=2
print(a)
{1:2}