*참고 : https://dojang.io/mod/page/view.php?id=2291
a = [[10, 20],
[30, 40],
[50, 60] ]
2차원 리스트의 할당과 복사
파이썬의 리스트는 다른 변수에 할당해도 변수 이름만 달라질 뿐 같은 리스트를 가르킵니다. 복사가 아닌 참조가 되었기 때문입니다. 2차원 리스트도 마찬가지 입니다.
>>> a = [[10, 20], [30, 40]]
>>> b = a
>>> b[0][0] = 500
>>> a
[[500, 20], [30, 40]]
>>> b
[[500, 20], [30, 40]]
위와같이 a 객체를 b에 할당하고 b 안의 원소를 바꿨는데, a 안의 원소도 같이 바뀌는걸 볼 수 있습니다.
리스트에선 이 문제를 해결하기 위해 copy
메소드를 사용합니다.
>>> a = [[10, 20], [30, 40]]
>>> b = a.copy()
>>> b[0][0] = 500
>>> a
[[500, 20], [30, 40]]
>>> b
[[500, 20], [30, 40]]
그런데 여기선 copy
를 사용해도 변화가 없습니다. 2차원 이상의 다차원 리스트에서는 완전 복사를 위해 copy 모듈의 deepcopy
메소드를 사용해야 합니다.
>>> import copy # copy 모듈을 가져옴
>>> a = [[10, 20], [30, 40]]
>>> b = copy.deepcopy(a) # copy.deepcopy 함수를 사용하여 깊은 복사
>>> b[0][0] = 500
>>> a
[[10, 20], [30, 40]]
>>> b
[[500, 20], [30, 40]]