Дублировать список списков в Python? - PullRequest
2 голосов
/ 12 ноября 2011

Мне нужно иметь возможность дублировать список списков в Python.

, например, сейчас у меня есть функция, которая возвращает список.

это всегда списки в списке,

например:

 myList = [[1,2,3],[4,5,6],[7,8,9]]

Теперь мне нужно создать две копии этого списка (myList1 и myList2), каждая из которых может изменяться отдельно (например, если я редактирую myList1myList2 не будет редактироваться)

Я все перепробовал.

от простого:

 myList1 = myList[:]
 myList2 = myList[:]

до более сложного:

 myList1 = []
 for ch in myList:
      myList1.append(ch)


 myList2 = []
 for ch in myList:
      myList2.append(ch)

ничего не работает.Если я изменю значение в одном списке:

 myList1[0][0] = 10

оба списка станут:

 [[10,2,3],[4,5,6],[7,8,9]]

Есть идеи, как это сделать?

Ответы [ 2 ]

8 голосов
/ 12 ноября 2011

Все, что вы до сих пор пробовали, создает только поверхностную копию внешнего списка. Чтобы создать глубокую копию, используйте

copied_list = [x[:] for x in my_list]

с использованием понимания списка или

copied_list = copy.deepcopy(my_list)

с использованием функции copy.deepcopy().

3 голосов
/ 12 ноября 2011

Использование copy.deepcopy.

myList2 = copy.deepcopy(myList1)

Посмотрите, как работает онлайн: ideone

...