플로라도의 data workout

파이썬 - 얕은복사(shallow copy)와 깊은 복사(deep copy) 본문

기초 노트/Python

파이썬 - 얕은복사(shallow copy)와 깊은 복사(deep copy)

플로라도 2023. 11. 8. 00:54

앞선 글에서 
 
mutable한 객체를 반복하고자 할때는 얕은 복사가 이루어져 동일한 메모리 값을 참조하게 된다고 했다.
그렇다면 mutable객체의 반복은 얕은 복사로 동일한 객체를 참조하는게 아니라 서로 다른 별개의 객체로 만들어 값만 복사할 순 없을까?
 

 얕은복사와 깊은복사를 예시를 통해 다시 정리해보자.
 
얕은 복사 (Shallow Copy): 이 방법은 최상위 컨테이너는 새로운 복사본을 만들지만, 컨테이너가 담고 있는 내부 객체들은 원본 객체의 참조를 그대로 유지한다. Python의 copy 모듈의 copy() 함수를 이용하여 얕은 복사를 수행할 수 있다.
 

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)  # 내부 리스트의 변경이 원본에도 반영됨.

 
 
깊은 복사 (Deep Copy): 이 방법은 최상위 컨테이너뿐만 아니라 내부에 담긴 모든 객체들까지 새로운 복사본을 만든다. copy 모듈의 deepcopy() 함수를 이용하여 깊은 복사를 수행할 수 있다.

import copy

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

# 모든 요소가 새로운 복사본
deep_copied_list[0][0] = 'X'
print(original_list)  # 원본 리스트는 변경되지 않음