Почему массив изменяется при изменении его составляющих?

[1] n = 3
[2] deck = [1,2,3]
[3] piles = [[],[4,5]]
[4] ndp = [(1,[1,2,3,4],[[],[4,5]])]
    
[5] if (n, deck, piles) not in ndp:
[6]     k = (n,deck,piles)
[7]     ndp.append(k)

[8] print(ndp)
>>> [(1, [1, 2, 3, 4], [[], [4, 5]]), (3, [1, 2, 3], [[], [4, 5]])]

[9] piles[1].append(deck.pop(0))
[10] print(ndp)
>>> [(1, [1, 2, 3, 4], [[], [4, 5]]), (3, [2, 3], [[], [4, 5, 1]])]

Почему массив ndp изменяется после изменения piles в строке [9] ?


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

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

Массив ndp изменился после извлечения первого элемента из deck. А ndp хранит в себе ссылку на deck.

Поэтому в массив стоит добавлять копии объектов (через copy.deepcopy(piles) и copy.deepcopy(deck)).

→ Ссылка