Python: изменение двумерного списка в цикле

Столкнулся с странной особенностью двумерных списков.

ll = [['']*5]*5

for i in range(0, 5):
    for j in range(0, 5):
        if (i==j) :
            print('yes', i, j)
            ll[i][j] = 'yes'
        if (i!=j):
            print('no', i, j)
            ll[i][j] = 'no'
#ожидаю получить строку 'yes', но получаю 'no'
ll[0][0]
#здесь получаю строку 'no'
ll[0][1]

Как объяснить такой результат?


Ответы (1 шт):

Автор решения: Danis

вы создаёте список, а потом умножаете его на 5, таким образом он не клонируется, а копируется сам объект со всеми его адресамм

поэтому надо место ll = [[''] * 5] * 5 писать ll = [[''] * 5 for _ in range(5)]

→ Ссылка