var = [[0] * 5] * 5帮助理解python列表?

时间:2012-02-01 00:29:44

标签: python coding-style

我遇到了一条python列表声明。我对它的行为感到有点困惑。 有人可以解释一下。感谢您的帮助。

    >>> v  = [[0]*2]*2
    >>> v
    [[0, 0], [0, 0]]
    >>> v[1][1] = 23
    >>> v
    [[0, 23], [0, 23]]
    >>> v[1][1] = 44
    >>> v
    [[0, 44], [0, 44]]
    >>>

2 个答案:

答案 0 :(得分:7)

列表的*运算符会重复其内容,您可以在输出中清楚地看到。

但是,它不会复制元素,它只是复制对象引用。所以在这种情况下,两个[0,0 ]都有相同的底层列表对象,这应该可以解释这种现象。

要验证这一点,请尝试v[0] = [0,44]将新的(因而独立的!)列表对象分配给主列表的第一个元素;然后重新尝试更改v[1][1]。这次只有一个条目会在输出中发生变化。

答案 1 :(得分:0)

v只是一个列表清单。

* thing第一行意味着“在我的列表中重复2次0。”因此每个嵌套列表的大小为2并包含零。

然后,您只需将值设置为列表列表中的某些单元格:)