Присвоение элемента списка списков по индексу устанавливает все первые элементы списков - PullRequest
0 голосов
/ 29 июня 2018

У меня есть список из 3 значений в месяц, которые инициализируются следующим образом:

v=[[0.0,0.0,0.0]]*12

В 2 вложенных цикла я хочу добавить значение для элемента:

v[month-1][pos] += row[0]

В один момент выполнения кода month-1 = 8 и pos = 0. row[0], которое я получаю из запроса к базе данных: 1.0.

Странно, как результат я получаю [[1.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0,....
Таким образом, первый элемент каждого подсписка установлен на 1.0. Как это может случиться? Еще более странно, если я отлаживаю код и вручную устанавливаю значение v[8][0]=9, или оно работает так, как задумано.

1 Ответ

0 голосов
/ 29 июня 2018

Когда вы делаете это v=[[0.0,0.0,0.0]]*12, вы получаете список с 12 ссылками на тот же список, чтобы исправить это, вместо этого используйте понимание:

v = [[0.0,0.0,0.0] for _ in range(12)]

Обычно *, используемый таким образом, не следует использовать поверх изменяемых элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...