Initializing 2D lists in Python: How to make deep copies of each row?

前端 未结 2 1236
鱼传尺愫
鱼传尺愫 2021-01-18 11:48

Let\'s say I want to initialize a 2D Python list with all 0\'s, I\'d do something like:

test = [[0.0] * 10] * 10

Then I start modifying val

2条回答
  •  梦毁少年i
    2021-01-18 12:25

    The list test contains multiple iterations of the same list, hence a change in one (as you are making by reassigning the first element of test[0]) is reflected in all the others. Try this instead:

    [[0.0]*10 for _ in xrange(10)]  # or `range` in Python 3.x
    

    Of course, you wouldn't need to worry about this if all you had was [0.0] * 10, since this creates a list of ints, none of which can ever mutate. Lists, on the other hand, are indeed mutable.

提交回复
热议问题