Ответ 1
Я заберу этот удар, даже если поведение, которое вы описываете (как вы описали), невозможно.
Если вы создаете список, вам нужно убедиться, что каждый подсписок - это другой список. Рассмотрим:
a = []
b = [a, a]
Здесь я создал список, в котором оба подписок - это тот же самый список. Если я изменю один, он появится в обоих. например:.
>>> a = []
>>> b = [a, a]
>>> b[0].append(1)
>>> b
[[1], [1]]
вы будете часто видеть это поведение с инициализацией списка с помощью оператора *
:
a = [[None]*7]*7
например.
>>> a = [[None]*7]*7
>>> a
[[None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None]]
>>> a[0][1] = 3
>>> a
[[None, 3, None, None, None, None, None], [None, 3, None, None, None, None, None], [None, 3, None, None, None, None, None], [None, 3, None, None, None, None, None], [None, 3, None, None, None, None, None], [None, 3, None, None, None, None, None], [None, 3, None, None, None, None, None]]
Исправить не следует использовать *
7 во внешнем списке (внутренний список в порядке, так как None
является неизменным):
a = [[None]*7 for _ in range(7)]
например:.
>>> a = [[None]*7 for _ in range(7)]
>>> a[0][1] = 3
>>> a
[[None, 3, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None]]