얕은 복사와 깊은 복사

이서진·2023년 4월 1일
0

python

목록 보기
1/3

파이썬에서 리스트와 같이 mutable한 객체를 복사할 때에는 주의해야 한다.

immutable (변하지 않는) : int, float, tuple, str, bool
mutable (변하는) : list, set, dictionary

파이썬에서 mutable한 객체를 아래와 같이 복사하면
두 객체가 같은 주소값을 참조하게 되는 얕은 복사가 이루어져
복사된 객체의 값을 변경하면 기존 객체도 같이 변경된다.

copyList = list		# 얕은 복사

그렇다면 기존 객체를 보존하고자 할 때 사용하는 복사 방법을 알아보자.

1. 깊은 복사같은 얕은 복사

copyList = list[:]			# 얕은 복사 - 슬라이싱
copyList = list.copy()		# 얕은 복사 - 메소드
import copy
copyList = copy.copy(list)	# 얕은 복사 - 모듈

위 세 가지 방법으로 객체를 복사하면
객체 자체는 깊은 복사가 이루어져 기존 객체를 보존하는 듯 하지만,
객체 내부의 요소들까지는 깊은 복사가 이루어지지 않는다.
따라서 일차원 객체는 깊은 복사가 가능하지만, 다차원 객체의 깊은 복사는 불가능하다.

2. 깊은 복사

import copy
copyList = copy.deepcopy(list)	# 깊은 복사

copy 모듈의 deepcopy 메소드를 사용하면 객체 내부 요소들까지 깊은 복사가 가능하다.
단, deepcopy 메소드는 시간이 많이 걸려서 꼭 필요한 다차원 객체의 복사에만 사용하는 것이 좋겠다.

profile
춤추는감자

0개의 댓글

관련 채용 정보