본문 바로가기

라이브러리

파이썬(Python) copy 사용법 정리(얕은복사 vs 깊은복사)

copy 라이브러리는 객체를 복사하고 복제하는 데 사용됩니다. 객체를 복사하면 원본 객체가 변경되어도 복사본 객체는 변경되지 않으며, 이는 일부 프로그래밍 패턴에서 유용합니다. 이 라이브러리에는 두 가지 유형의 복사 방법이 있습니다.

1. 얕은 복사 (Shallow copy)

얕은 복사는 원본 객체를 복사하지만, 원본 객체에 포함된 객체는 참조를 공유합니다. 이것은 객체의 상위 수준 값만 복사하고 하위 수준 값은 참조합니다.

import copy

lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
lst2 = copy.copy(lst)

lst[0][0] = 100
print(lst)     # 출력: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
print(lst2)    # 출력: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]


위의 예제에서 lst의 첫 번째 요소를 변경하면, lst2도 변경됩니다.

2. 깊은 복사 (Deep copy)


깊은 복사는 원본 객체 및 포함된 모든 객체를 복사합니다. 따라서 원본 객체의 값이 변경되어도 복제본 객체에는 영향을 미치지 않습니다.

import copy

lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
lst2 = copy.deepcopy(lst)

lst[0][0] = 100
print(lst)     # 출력: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
print(lst2)    # 출력: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]


위의 예제에서 lst의 첫 번째 요소를 변경하면, lst2는 변경되지 않습니다.

copy 라이브러리는 다른 데이터 유형에 대해서도 작동합니다. 이를 통해 함수나 클래스의 인스턴스 등과 같은 객체를 복사할 수 있습니다. 단, 깊은 복사는 매우 큰 객체에 대해서는 속도가 느릴 수 있습니다.