파이썬의 얕은 복사 (Shallow Copy) 깊은 복사 (Deep Copy)

2023. 11. 14. 20:21개발 문서/Python

728x90
반응형

파이썬에서 객체를 복사하는 두 가지 주요 방법은 "얕은 복사(Shallow Copy)"와 "깊은 복사(Deep Copy)"입니다. 이 두 가지 방법은 객체의 중첩 구조와 참조에 따라 다르게 동작합니다.

얕은 복사 (Shallow Copy):

얕은 복사는 원본 객체의 최상위 레벨만을 복사하고, 내부에 있는 객체는 원본과 같은 객체를 참조합니다. 즉, 내부 객체가 변경되면 복사본에도 영향을 미칩니다.

예시:

import copy

original_list = [1, [2, 3], [4, 5]]
shallow_copy_list = copy.copy(original_list)

# 얕은 복사이므로 내부 리스트는 동일한 객체를 참조
original_list[1][0] = 'X'

print(original_list)         # 출력: [1, ['X', 3], [4, 5]]
print(shallow_copy_list)     # 출력: [1, ['X', 3], [4, 5]]

위의 예시에서 볼 수 있듯이, 얕은 복사를 사용하면 최상위 레벨의 객체는 새로 생성되지만 내부 객체는 원본과 공유됩니다.

깊은 복사 (Deep Copy):

깊은 복사는 원본 객체와 그 안에 있는 모든 객체를 새롭게 생성하여 복사합니다. 따라서 원본 객체와 복사본은 완전히 독립된 객체가 됩니다.

예시:

import copy

original_list = [1, [2, 3], [4, 5]]
deep_copy_list = copy.deepcopy(original_list)

# 깊은 복사이므로 내부 리스트도 새로운 객체를 참조
original_list[1][0] = 'X'

print(original_list)         # 출력: [1, ['X', 3], [4, 5]]
print(deep_copy_list)        # 출력: [1, [2, 3], [4, 5]]

깊은 복사를 사용하면 내부 객체도 새로 생성되기 때문에 원본 객체의 변화가 복사본에 영향을 미치지 않습니다.

요약하면, 얕은 복사는 최상위 레벨의 객체만을 복사하고 내부 객체는 공유하며, 깊은 복사는 모든 객체를 완전히 새로 생성하여 독립적인 복사본을 만듭니다. 선택은 상황에 따라 다르며, 객체 구조와 데이터의 크기에 따라서도 효율성이 달라질 수 있습니다.