얕은 복사와 깊은 복사의 차이점
파이썬에서 객체(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 강의를 등록해 주세요!