copy & deepcopy
copy와 deepcopy는 파이썬의 copy 모듈에서 제공하는 두 가지 복사 방법이다.
두 개의 차이를 이해하기 위해서는 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)에 대해 알아야한다!
얕은 복사 (copy.copy())
객체를 새롭게 생성하지만, 내부의 요소들은 원본 객체와 같은 참조를 가진다.
즉, 최상위 객체 (바깥쪽 객체)는 새롭게 생성되지만, 내부의 요소 (하위 객체들)는 원본 객체와 같은 주소를 공유하게 된다.
import copy
list1 = [[1, 2, 3], [4, 5, 6]]
list2 = copy.copy(list1)
list2[0][0] = 100 # 내부 요소를 변경
print(list1)
print(list2)
list2를 copy.copy(list1)로 복사했지만, 내부 리스트는 원본과 공유되기 때문에 list2[0][0]을 변경하면 list1도 영향을 받게되어 각 출력값은 [[100, 2, 3], [4, 5, 6]], [[100, 2, 3], [4, 5, 6]]이 된다.
깊은 복사 (copy.deepcopy())
객체를 새롭게 생성하고, 내부의 모든 하위 객체들까지 새롭게 생성해 원본과 완전히 독립적인 객체를 만든다.
즉, 원본 객체와 복사된 객체가 전혀 다른 메모리 주소를 가지며, 한 쪽을 변경해도 다른 쪽에 영향을 주지 않는다.
import copy
list1 = [[1, 2, 3], [4, 5, 6]]
list2 = copy.deepcopy(list1)
list2[0][0] = 100
print(list1)
print(list2)
copy.deepcopy()를 사용하면 내부 리스트까지도 새로운 객체로 복사되므로, list2의 값을 변경하더라도 list1에는 영향을 주지 않는다.
copy, deepcopy는 각각 언제 사용해야 하는가?
copy
- 리스트, 딕셔너리 등 내부 요소들이 변경될 가능성이 없는 경우
- 성능이 중요하고 내부 객체를 공유해도 되는 경우
deepcopy
- 리스트 내 리스트처럼 내부 요소들이 변경될 가능성이 있는 경우
- 원본과 독립적인 복사본이 필요한 경우
'Language > Python' 카테고리의 다른 글
| [Python] ContextManager의 개념 (0) | 2025.02.10 |
|---|---|
| [Python] Python Decorator 개념과 활용 (0) | 2025.02.10 |