Kopiowanie zagnieżdżonych list w Pythonie

Chcę skopiować listę 2D, tak, że jeśli zmodyfikuję jedną listę, druga nie będzie modyfikowana.

Dla listy jednowymiarowej robię to:

a = [1, 2]
b = a[:]

A teraz, jeśli zmodyfikuję b, a nie jest modyfikowany.

Ale to nie działa dla dwuwymiarowej listy:

a = [[1, 2],[3, 4]]
b = a[:]

Jeśli zmienię b, a zostaje również zmodyfikowany.

Jak to naprawić?
Author: vaultah, 2010-03-30

2 answers

Dla bardziej ogólnego rozwiązania, które działa niezależnie od liczby wymiarów, użyj copy.deepcopy():

import copy
b = copy.deepcopy(a)
 40
Author: Ayman Hourieh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-29 23:13:01
b = [x[:] for x in a]
 40
Author: Ignacio Vazquez-Abrams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-29 23:11:48