얕은 복사 (Shallow Copy) 깊은 복사 (Deep Copy)
• bamjun
얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)는 Python과 같은 프로그래밍 언어에서 객체를 복사하는 두 가지 주요 방법입니다. 이들 간의 차이는 객체가 복사되는 방식과 복사된 객체들이 원본 객체와의 관계에서 나타납니다.
얕은 복사 (Shallow Copy)
- 얕은 복사는 객체의 최상위 수준의 복사본만을 생성합니다.
- 복사된 객체와 원본 객체는 중첩된 객체들에 대해서는 동일한 참조(주소)를 공유합니다.
- 즉, 얕은 복사를 사용하여 복사된 객체의 내부 객체(예: 리스트 내의 다른 리스트)를 수정하면, 이 변경사항이 원본 객체에도 반영됩니다.
- Python에서는
copy()
함수나 리스트의 슬라이싱(list[:]
)을 사용하여 얕은 복사를 수행할 수 있습니다.
깊은 복사 (Deep Copy)
- 깊은 복사는 객체에 포함된 모든 수준의 객체들을 재귀적으로 복사합니다.
- 결과적으로, 복사된 객체는 원본 객체와 완전히 독립적입니다. 원본 객체의 어떠한 변경사항도 복사된 객체에 영향을 주지 않습니다.
- 깊은 복사는 원본 객체가 가진 모든 중첩된 객체들에 대해서도 새로운 복사본을 생성합니다.
- Python에서는
copy
모듈의deepcopy()
함수를 사용하여 깊은 복사를 수행할 수 있습니다.
예시
import copy
# 얕은 복사 예시
original_list = [[1, 2, 3], [4, 5, 6]]
shallow_copied_list = copy.copy(original_list)
shallow_copied_list[0][0] = 'x'
print(original_list) # 변경사항이 반영됨: [['x', 2, 3], [4, 5, 6]]
# 깊은 복사 예시
original_list = [[1, 2, 3], [4, 5, 6]]
deep_copied_list = copy.deepcopy(original_list)
deep_copied_list[0][0] = 'y'
print(original_list) # 변경사항이 반영되지 않음: [[1, 2, 3], [4, 5, 6]]
사용 상황
- 얕은 복사는 원본 데이터에 대한 변경이 필요하지 않거나, 데이터 구조가 간단할 때 유용합니다.
- 깊은 복사는 원본 데이터와 완전히 독립된 복사본이 필요하거나, 복잡한 데이터 구조를 다룰 때 적합합니다.