Установка значения во вложенном списке Python автоматически выполняет итерации
У меня есть список Python, созданный model = [[[[0,0,0,0]]*4]*15]*5
, который представляет собой список, который выглядит так (без краткости точек): model = [[[[0,0,0,0],...[0,0,0,0]]...[[0,0,0,0],...[0,0,0,0]]]...[[[0,0,0,0],...[0,0,0,0]]...[[0,0,0,0],...[0,0,0,0]]]]
, Проблема в том, что когда я пытаюсь установить один из нулей на другое значение, используя
def setLED(model,boardid,chipid,tankid,ledid,value):
model[boardid][chipid][tankid][ledid]=value
каждый список из 4 нулей устанавливается одинаково. т.е. если бы я попытался использовать setLED(модель,0,0,0,0,255), первое значение в каждом списке из 4 нулей было бы 255. Предполагаемый результат состоит в том, что только первый список из 4 нулей (т.е. модель [0][0][0][0]), будет изменено. Я не думаю, что есть способ прикрепить файлы, но если кому-то это нужно, я могу опубликовать все содержимое списка.
Заранее спасибо всем, кто может понять, почему это происходит.
РЕДАКТИРОВАТЬ: это дубликат индексов вложенного списка
1 ответ
Когда вы создаете массив массивов, как это:
[[0]]*n
вы создаете массив, содержащий n ссылок на один и тот же массив. Вам нужно добавить новые массивы другим способом. Одним из способов сделать это было бы использование списочных представлений, т.е.
[[[ [0,0,0,0] for _ in range(4)] for _ in range(15)] for _ in range(5)]
который создает новые массивы вместо повторного использования ссылок.