Programming
Python List 얕은 복사, 깊은 복사
__미니__
2016. 4. 26. 16:38
파이썬을 사용하는 사람이라면 List의 편리함을 아주 잘 알고 있을 것이라고 생각한다. 이번에 파이썬으로 프로그램을 좀 짜던 중, 리스트를 복사해야 하는 일이 생겼는데 늘 해왔던 대로 변수를 복사하듯이 list2 = list1 이런 식으로 대입했더니 list2를 변경하면 list1까지 같이 변경되어버리는 문제가 생겼다. 파이썬이 C 기반으로 만들어진 언어인데, 내부적으로 얕은 복사를 사용하는 모양이었다.
(이런식으로...)
이 방식을 해결하고 독립적으로 내부 값들을 전부 복사하여 새 리스트를 생성하는 간단한 방법은 다음 두 가지의 방법이 있다.
list2 = list1[:]
list2 = list(list1)
하지만 위와 같은 방식을 사용하면 겉으로는 깊은 복사처럼 보이지만 리스트 내의 변수를 새로운 리스트에 담아서 주는 것 뿐이기 때문에 리스트 내의 리스트를 사용할 경우 해당 내부의 리스트까지 제대로 깊은 복사가 되지 않는다. 결국은 얕은 복사라는 의미이다.
(여전히 얕은 복사이다)
이걸 해결하기 위해서는 copy.deepcopy 함수를 사용하면 된다.