Давайте посмотрим на этот сеанс интерпретатора:
>>> a = [[0,0,0]] * 5
>>> a
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> a[0][0] = 1
>>> a
[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
На самом деле это обычная ошибка в Python. Код переводится примерно так:
inner = [0, 0, 0]
a = [inner, inner, inner, inner, inner]
Такой способ записи делает более понятным, что вы фактически создаете список, где все записи указывают на один и тот же объект (inner
) .
Один из способов исправить это - использовать понимание списка, таким образом, для каждой записи списка будет создан новый внутренний список:
vertices=[[0, 0] for _ in range(n)]
edges=[[0, 0, 0] for _ in range(m)]
Другое исправление - использование numpy и объявление 2D-матрица с использованием numpy.zeros(n, 2)
. Numpy обычно используется в приложениях, интенсивно использующих математику / числа.