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

vin*_*dyz 4 python coding-style

我遇到了一段python list decclaration.我对它的行为感到有点困惑.可以somone请解释这个.感谢您的帮助.

    >>> 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]]
    >>>
Run Code Online (Sandbox Code Playgroud)

Ale*_*ler 7

*系列表操作重复的内容,你可以在输出中清楚地看到.

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

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