Найти - Пользователи
Полная версия: Список списков вместо списка ссылок на списки
Начало » Python для новичков » Список списков вместо списка ссылок на списки
1
sbar
Есть глобальный массив (список) списков из чисел, надо создать копию этого массива в качестве локальной переменной какой-то функции, изменить и возвратить эту копию (не затронув значения глобального массива).
С одномерными массивами все получается, но вот с двумерным:
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 программирую достаточно давно, но над этой, казалось бы простой проблемой, уже около часа думаю %)
pasaranax
Питон в большинстве случаев старается делать ссылки вместо копирования. Посмотри модуль copy, а если конкретнее, то глубокое копирование можно сделать функцией copy.deepcopy()
sbar
Спасибо, то что надо :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB