在Python 3中初始化列表列表时的奇怪行为

问题描述 投票:0回答:1

[似乎与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], [], [], []]
python-3.x list
1个回答
0
投票

这是内置行为。以这种方式增加列表时,您不是在创建新列表,而只是将引用复制到一个初始列表中,因此,其中一项的修改会导致其他项被修改。

参见:List of lists changes reflected across sublists unexpectedly

您已经发现,建议使用列表理解来解决此问题的方法。

© www.soinside.com 2019 - 2024. All rights reserved.