在Python中向字典添加值

时间:2014-04-29 12:55:53

标签: python dictionary

以下代码:

rect_pos = {}

rect_pos_single = [[0,0], [50, 0], [50, 100], [0, 100]]

i = 0

while (i<3): 

    for j in range(4):

        rect_pos_single[j][0] += 50

    print rect_pos_single

    rect_pos[i] = rect_pos_single

    i += 1

print rect_pos

代码打印变量“rect_pos_single”的后续迭代。接下来,我将它们添加到字典“rect_pos”。键更改,但值始终相同 - 最后一次迭代。我不明白为什么?

1 个答案:

答案 0 :(得分:1)

这一行

rect_pos_single[j][0] += 50

就地修改列表;也就是说,rect_pos_single始终引用相同的列表对象,但您更改了该列表的内容。

这一行

rect_pos[i] = rect_pos_single

rect_pos_single引用的列表引用分配给rect_pos[i]rect_pos的每个元素都指向相同的列表。

最简单的更改是使用

将列表的副本分配给字典
rect_pos[i] = copy.deepcopy(rect_pos_single)  # Make sure you import the copy module

需要深层复制,因为rect_pos_single是一个列表列表,并且使用rect_pos_single执行浅层复制只会创建一个新列表,其中包含对使用{{实际修改的相同列表的引用的引用1}}。