[似乎与Python 3.8.1有关的列表存在意外行为:
> l = [[]] * 4
> l[0].append(1)
> l
[[1], [1], [1], [1]]
我希望l等于[[1],[],[],[]]。
l中的列表是否对应于不同的“对象”?
另一方面,以下代码的行为符合预期。
> l = [ [] for i in range(4)]
> l[0].append(1)
> l
[[1], [], [], []]
这是内置行为。以这种方式增加列表时,您不是在创建新列表,而只是将引用复制到一个初始列表中,因此,其中一项的修改会导致其他项被修改。
参见:List of lists changes reflected across sublists unexpectedly
您已经发现,建议使用列表理解来解决此问题的方法。