Посмотрите на этот код Python:
a = [1, 2, 3]
b = [4, 5, 6]
c = [[a, b], [b, a]] # [[[1, 2, 3], [4, 5, 6]], [[4, 5, 6], [1, 2, 3]]]
c[0][0].append(99) # [[[1, 2, 3, 99], [4, 5, 6]], [[4, 5, 6], [1, 2, 3, 99]]]
Обратите внимание, что изменение одного элемента c
изменяет это везде. То есть, если 99
добавлено к c[0][0]
, оно также добавлено к c[1][1]
. Я предполагаю, что это потому, что Python ловко ссылается на тот же объект для c[0][0]
и c[1][1]
. (То есть их id () такой же.)
Вопрос: Есть ли что-нибудь, что можно сделать с c
, чтобы его элементы списка можно было безопасно локально изменить? Выше приведен только пример, моя реальная проблема состоит в том, что список гораздо сложнее, но с аналогичной проблемой.
(Извините за плохо сформулированный вопрос выше. Гуру Python, пожалуйста, не стесняйтесь изменять вопрос или теги, чтобы лучше выразить этот запрос.)