본문 바로가기
Computer & Program/python

[python] Copy (Shallow vs Deep)

by TDRemon 2024. 1. 19.
반응형

안녕하세요. TDR입니다.

오늘은 python에서의 copy(복사)에 대해 정리해 보겠습니다.

import copy

ori_object = [1, 2, [3, 4]]

# 얕은 복사 01
cop_object = ori_object
ori_object.append(6)
# ori_object = [1, 2, [3, 4], 6]
# cop_object = [1, 2, [3, 4], 5]

# (약간) 얕은 복사 02
cop_object = ori_object[:]
ori_object.append(6)
# ori_object = [1, 2, [3, 4], 6]
# cop_object = [1, 2, [3, 4]]
ori_object[2].append(5)
# ori_object = [1, 2, [3, 4, 5], 6]
# cop_object = [1, 2, [3, 4, 5]]

# (약간) 얕은 복사 03
cop_object = copy.copy(ori_object)	# cop_object = ori_object.copy()
ori_object.append(6)
# ori_object = [1, 2, [3, 4], 6]
# cop_object = [1, 2, [3, 4]]
ori_object[2].append(5)
# ori_object = [1, 2, [3, 4, 5], 6]
# cop_object = [1, 2, [3, 4, 5]]

# 깊은 복사
cop_object = copy.deepcopy(ori_object)
ori_object.append(6)
# ori_object = [1, 2, [3, 4], 6]
# cop_object = [1, 2, [3, 4]]
ori_object[2].append(5)
# ori_object = [1, 2, [3, 4, 5], 6]
# cop_object = [1, 2, [3, 4]]

위의 코드 예시를 보면 아시겠지만, Object에 대해서 완전히 별도의 저장소에 저장을 하고 싶으면 반드시 copy.deepcopy()를 써야만 합니다. 아니면 1차 포인터의 값만 바뀐다거나 하는 얕은 복사가 일어나게 됩니다. (반대로 얘기하면 2차 배열과 같이 다중 포인터가 아니라면 배열의 경우 slice를 통한 복사를 해도 됨)

반응형

'Computer & Program > python' 카테고리의 다른 글

[python] map 함수  (1) 2024.01.25
[python] Dictionary  (0) 2024.01.24
[python] Set - 02  (0) 2024.01.19
[python] Set - 01  (0) 2024.01.19
[python] Tuple  (0) 2024.01.16

댓글