Search code examples
pythonlistrepeatmultiplicationassign

Unexpected update result on the quickly nested list in Python


Why couldn't the first element but the whole column be updated below?

>>> x=2*[2*[1]]
>>> x
[[1, 1], [1, 1]]
>>> x[0][0]=2
>>> x
[[2, 1], [2, 1]]

Solution

  • Even tho this is a clear duplicate but use range:

    >>> x=[[1 for i in range(2)] for x in range(2)]
    >>> x
    [[1, 1], [1, 1]]
    >>> x[0][0]=2
    >>> x
    [[2, 1], [1, 1]]
    >>> 
    

    At least still able to do:

    >>> x=[[1]*2 for x in range(2)]
    >>> x[0][0]=2
    >>> x
    [[2, 1], [1, 1]]
    >>>