앞선 글에서
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) # 원본 리스트는 변경되지 않음
'기초 노트 > Python' 카테고리의 다른 글
판다스 데이터 프레임 인덱싱 유의점들 (0) | 2024.05.07 |
---|---|
파이썬 클래스 메서드(classmethod)와 정적 메서드(staticmethod) (0) | 2024.04.22 |
%cd와 !pip install 명령어의 '%'와 '!'는 무엇일까? (0) | 2024.04.22 |
파이썬 - 이중 리스트 초기화시 주의점 (1) | 2023.11.06 |
파이썬 - 배열(array)을 flatten 시키는 방법 (0) | 2023.11.04 |