Проблема с вашим кодом заключается в том, что он ссылается на тот же список, поэтому, когда вы делаете b[0][0] = 0
, вы действительно обновляете значение по ссылке (на которую указывают все три массива).
Toполучить желаемые результаты, я бы сделал (используя список понимания ):
>>> b = [[1]*3 for _ in range(3)]
>>> b
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
>>> b[0][0] = 0
>>> b
[[0, 1, 1], [1, 1, 1], [1, 1, 1]]
, который фактически воссоздает список, поэтому он ссылается на другие списки, а не один и тот же в вашем ответе.
b = [[1]*3 for _ in range(3)]
эквивалентно:
b = []
for _ in range(3):
b.append([1]*3)