在字典中插入值的问题

Problem with inserting values in dictionary

在作为列表成员的字典中插入值时遇到问题。 当我为索引获取用户输入时,它会更改所有索引的值。

nisl = int(input())
isl = [{'x1':None,'y1':None,'x2':None,'y2':None,}]*nisl
# isl = []
# ship[0]['x'] = '1'
for i in range(nisl):
    isl[i]['x1'],isl[i]['y1'],isl[i]['x2'],isl[i]['y2'] = map(int, input().split(' '))
    print(isl)

我得到的输出:

2
0 0 1 1
[{'x1': 0, 'y1': 0, 'x2': 1, 'y2': 1}, {'x1': 0, 'y1': 0, 'x2': 1, 'y2': 1}]
3 0 1 4
[{'x1': 3, 'y1': 0, 'x2': 1, 'y2': 4}, {'x1': 3, 'y1': 0, 'x2': 1, 'y2': 4}]

我的预期:

2
0 0 1 1
[{'x1': 0, 'y1': 0, 'x2': 1, 'y2': 1}, {'x1': None, 'y1': None, 'x2': None, 'y2': None}]
3 0 1 4
[{'x1': 0, 'y1': 0, 'x2': 1, 'y2': 1}, {'x1': 3, 'y1': 0, 'x2': 1, 'y2': 4}]

使用:

isl = [{'x1': None, 'y1': None, 'x2': None, 'y2': None,} for _ in range(nisl)]

而不是:

isl = [{'x1':None,'y1':None,'x2':None,'y2':None,}]*nisl 

问题是您创建了一个词典列表,其中每个词典都有相同的引用。因此,当一个改变时,它也会反映在另一个上。

作为解决方案,创建不同的词典,如第一个代码片段所示。