Python. Не понимаю поведение .append в цикле

товарищи!
Собственно код:

K = [[0 for x in range(capacity+1)] for x in range(2)]
S = []
# DP
for i in range(item_count+1):
    for c in range(capacity+1):
        if i == 0 or c == 0:
            K[i % 2][c] = 0
            if c == capacity:
                S.append(K[i % 2])
        elif weights[i-1] <= c:
            K[i % 2][c] = max(
                values[i-1]+K[(i - 1) % 2][c-weights[i-1]], 
                K[(i - 1) % 2][c])
            if c == capacity:
                S.append(K[i % 2])
        else:
            K[i % 2][c] = K[(i - 1) % 2][c]
value = K[item_count % 2][capacity]
print(S)

Ожидаю что в каждом цикле в S будет добавляться текущая запись K[i % 2], таким образом в результате получу матрицу S в которой будут все K[i % 2] из цикла. Однако вижу, что S не просто увеличивается с каждым циклом, а какие-то записи удаляются. Просьба подсказать из-за чего такое поведение программы?

Пример:
На первом цикле, когда i=0, c=capacity в S добавляется строка:

[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, 8, 8, 8, 8, 8, 8, 8, 8] 

Но вот потом вместо того, чтобы добавить третью строку при новом i, S приобретает следующий вид:

[0, 0, 0, 0, 8, 10, 10, 10, 10, 18, 18, 18]  
[0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8] 

Ну и при слебующем i:

[0, 0, 0, 0, 8, 10, 10, 10, 10, 18, 18, 18]  
[0, 0, 0, 0, 8, 10, 10, 10, 15, 18, 18, 18]  
[0, 0, 0, 0, 8, 10, 10, 10, 10, 18, 18, 18]

Как так?


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

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

Спасибо Stanislav Volodarskiy! Проблема была в том, что вставлял ссылку, а не само значение.

S.append(K[i % 2]) -> S.append(K[i % 2][:]) 
→ Ссылка