Насколько я люблю Python, справочные и глубококопийные вещи иногда меня вызывают.Deepcopy на вложенных ссылочных списках, созданных с помощью умножения списков, не работает
Почему DeepCopy здесь не работает:
>>> import copy
>>> a = 2*[2*[0]]
>>> a
[[0, 0], [0, 0]]
>>> b = copy.deepcopy(a)
>>> b[0][0] = 1
>>> b
[[1, 0], [1, 0]] #should be: [[1, 0], [0, 1]]
>>>
Я использую Numpy массив как workarround, который мне нужно позже в любом случае. Но я действительно надеялся, что, если бы я использовал глубокую копию, мне больше не пришлось бы преследовать какие-либо непреднамеренные ссылки. Есть ли больше ловушек, где он не работает?
+1, как это сделать правильно. –
Спасибо за быстрые ответы. Я ценю ваше элегантное решение. Тем не менее, мне кажется, что руководство по глубокому копированию вводит в заблуждение («Глубокая копия создает новый составной объект, а затем рекурсивно вставляет * копии * в него объектов, найденных в оригинале».). Было бы неплохо, если бы функция выполняла то, что я ожидал бы от deepcopy: избавиться от всех двойных ссылок. – Gonzo