플로라도의 data workout
파이썬 - 얕은복사(shallow copy)와 깊은 복사(deep copy) 본문
앞선 글에서
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 |
파이썬 - 이중 리스트 초기화시 주의점 (0) | 2023.11.06 |
파이썬 - 배열(array)을 flatten 시키는 방법 (0) | 2023.11.04 |