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][:])