Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 4, 2009 00:30:22

sbar
От:
Зарегистрирован: 2007-08-15
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Список списков вместо списка ссылок на списки

Есть глобальный массив (список) списков из чисел, надо создать копию этого массива в качестве локальной переменной какой-то функции, изменить и возвратить эту копию (не затронув значения глобального массива).
С одномерными массивами все получается, но вот с двумерным:

a = [[1, 2, 3], [4, 5, 6]]

def x(a):
aa = list(a)
aa[0][0] = 123
return aa

print x(a)
print a
Выдает
[[123, 2, 3], [4, 5, 6]]
[[123, 2, 3], [4, 5, 6]]
вместо ожидаемого мной
[[123, 2, 3], [4, 5, 6]]
[[1, 2, 3], [4, 5, 6]]
Зачем так неочевидно было задумано (я же не писал никаких “global a” даже, а оно все равно его изменяет) и как сделать правильно?
Вообще, на Python программирую достаточно давно, но над этой, казалось бы простой проблемой, уже около часа думаю %)



Офлайн

#2 Окт. 4, 2009 00:39:05

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Список списков вместо списка ссылок на списки

Питон в большинстве случаев старается делать ссылки вместо копирования. Посмотри модуль copy, а если конкретнее, то глубокое копирование можно сделать функцией copy.deepcopy()



Офлайн

#3 Окт. 4, 2009 11:57:10

sbar
От:
Зарегистрирован: 2007-08-15
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Список списков вместо списка ссылок на списки

Спасибо, то что надо :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version