python追加和+ =与dict的问题

zxy*_*too 0 python syntax

这看起来很简单,但我不知道我错了什么.

d1 = dict(zip(range(10), [[]]*10))
l1 = zip(range(10), range(10,20))

for pair in l1:
    d1[pair[0]].append(pair)
Run Code Online (Sandbox Code Playgroud)

结果d1:

>>> d1
{0: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 1: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 2: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 3: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 4: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 5: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 6: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 7: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 8: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 9: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)]}
Run Code Online (Sandbox Code Playgroud)

有了这个:

for pair in l1:
    d1[pair[0]] += [pair]
Run Code Online (Sandbox Code Playgroud)

同样的事情,但有:

for pair in l1:
    d1[pair[0]] = d1[pair[0]] + [pair]
Run Code Online (Sandbox Code Playgroud)

它给了我想要的结果

>>> d1
{0: [(0, 10)], 1: [(1, 11)], 2: [(2, 12)], 3: [(3, 13)], 4: [(4, 14)], 5: [(5, 15)], 6: [(6, 16)], 7: [(7, 17)], 8: [(8, 18)], 9: [(9, 19)]}
Run Code Online (Sandbox Code Playgroud)

似乎我错过了语法中的基本内容,有人可以指出它吗?谢谢〜

亚历克斯

Cat*_*lus 5

不要使用与可变对象的乘法.它为您提供对象的X引用,而不是X个不同的对象.

d1 = dict((idx, []) for idx in range(10))
Run Code Online (Sandbox Code Playgroud)