Этот бит:
for i in range(n):
List.append(listx)
Добавляет один и тот же список (listx
) к List
три раза. Поэтому, когда вы меняете его в одном месте, все ссылки меняются, потому что все они указывают на один и тот же список.
Кроме того, в качестве примечания: не называйте переменные List
с большой буквы, потому что это делает другие (и программное обеспечение) думают, что это класс. И имя list
, конечно, еще хуже, потому что это будет тень типа list
. Придумайте имена, которые имеют смысл и не являются слишком общими c - как playground
.
Более эффективный способ создания списка n
x m
:
playground = [[0] * m for _ in range(n)]
Бит [0] * m
создает список с m
нулями; это работает, потому что на число не ссылаются как на список, и нули не будут копиями одной и той же переменной.
* for _ in range(n)
заставляет результирующий список заполняться n
из этих списков. _
просто означает, что вы ничего не делаете с числом из range()
, оно существует только для нескольких повторений, и for
l oop нужно что-то в этом месте, либо переменную, либо _
"пофиг".