본문으로 건너뛰기
실습하기

얕은 복사와 깊은 복사의 차이점

파이썬에서 객체(Object)데이터와 그 데이터를 다루는 방법(메서드)를 함께 담고 있는 기본적인 데이터 단위입니다.

파이썬에서는 숫자, 문자열, 집합 등 거의 모든 것이 객체라고 할 수 있습니다.

객체를 복사하는 방법에는 얕은 복사(Shallow Copy)깊은 복사(Deep Copy)가 있습니다.

  • 얕은 복사는 원본이나 복사본 중 하나를 변경하면 다른 하나에도 영향을 미칩니다.

  • 깊은 복사는 원본과 복사본이 완전히 독립적이므로, 한쪽을 변경하더라도 다른 쪽에는 영향을 미치지 않습니다.


얕은 복사(Shallow Copy)

얕은 복사는 복사된 객체와 원본 객체가 내부 객체를 공유합니다.

따라서 복사된 객체를 변경하면 원본 객체도 함께 변경됩니다.

새로운 리스트를 정의하는 list() 함수를 사용하면 얕은 복사를 수행할 수 있습니다.

아래 코드 예시는 얕은 복사를 수행한 후, 복사된 객체의 요소를 변경하면 원본 객체도 함께 변경됨을 보여줍니다.

얕은 복사 예시
# 원본 리스트 생성
original = [1, 2, 3, [4, 5, 6]]

# 얕은 복사 수행 후 'shallow_copied'에 할당
shallow_copied = list(original)

# 'shallow_copied'의 중첩된 리스트 요소 변경
shallow_copied[3][0] = 99

# 원본 리스트도 변경됨
print("Original:", original)
# [1, 2, 3, [99, 5, 6]]

위 예시에서 shallow_copied 리스트의 중첩된 리스트 [4, 5, 6]를 변경하면, 원본 리스트인 original도 함께 변경됩니다.


깊은 복사(Deep Copy)

깊은 복사는 객체의 모든 계층에서 새로운 객체를 생성합니다.

이렇게 복사된 객체는 원본 객체와 완전히 독립적이기 때문에, 원본 객체를 변경해도 복사된 객체에는 아무런 영향을 미치지 않습니다.

아래 코드 예시는 깊은 복사를 수행한 후, 복사된 객체의 요소를 변경해도 원본 객체에는 영향을 미치지 않음을 보여줍니다.

깊은 복사 예시
# 'copy' 모듈을 import
import copy

original = [1, 2, 3, [4, 5, 6]]

deep_copied = copy.deepcopy(original)

deep_copied[3][0] = 99

# 결과 출력
print("Original:", original)
# [1, 2, 3, [4, 5, 6]] 출력 : 원본 리스트는 변경되지 않음

print("Deep Copied:", deep_copied)
# [1, 2, 3, [99, 5, 6]] 출력 : 복사된 리스트만 변경됨

위 코드에서 import 키워드는 외부의 코드를 가져와 사용할 수 있도록 돕습니다.

copy 모듈은 파이썬에 기본적으로 내장되어 있는 모듈로, copy.deepcopy() 함수를 사용하여 깊은 복사를 수행할 수 있습니다.

참고 : 프로그래밍에서 모듈(Module)은 함수, 변수, 클래스 등을 모아놓은 외부 코드 파일을 의미합니다.

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!