Установка значения во вложенном списке 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)]

который создает новые массивы вместо повторного использования ссылок.

Другие вопросы по тегам