将项添加到python中的列表列表时出现意外的输出

Pra*_*are 4 python list

这是相当直接的代码,它没有做我想做的事情.怎么了?

In [63]: c = [[]]*10

In [64]: c
Out[64]: [[], [], [], [], [], [], [], [], [], []]

In [65]: c[0]
Out[65]: []

In [66]: c[0] += [1]

In [67]: c
Out[67]: [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
Run Code Online (Sandbox Code Playgroud)

预期的产出是[[1], [], [], [], [], [], [], [], [], []].

unu*_*tbu 9

这是一个经典的Python陷阱.

c = [[]]*10
Run Code Online (Sandbox Code Playgroud)

创建一个包含10个项目的列表.同一个精确列表中的10个项目中的每一个.因此修改一个项目会修改它们.

要创建10个独立列表,请使用

c = [[] for i in range(10)]
Run Code Online (Sandbox Code Playgroud)