[python] 얕은 복사, 깊은 복사

csexpert·2021년 8월 3일
0

파이썬 리스트에서

list = ["a", "b", "c"]
copy_list = list

이렇게 복사를 하고 copy_list를 사용하면 문제가 없다.
하지만 리스트 내 요소 자체의 정체성이 같기 때문에 리스트 내의 요소가 변형 객체이면 변형 객체의 특성을 따르게 되는 것이 문제가 된다. 예를 들어, 리스트 내에 리스트가 있다면 복사한 값을 바꾼 경우에 기존의 값도 바뀌게 된다.
얕은 복사의 문제점이다.

list = ["a", ["b", "c"]]
copy_list = list

이런 경우에 [b,c] 인 copy_list[1]의 값을 바꾼다면 list에서도 바뀌게 된다.

list = ["a", ["b, c"]]
copy_list = list	# 또는 copy_list = list.copy()
copy_list[1] = "d"

print(list)
print(copy_list)

의 결과는

['a', 'd']
['a', 'd']

이다. 이는 대부분이 원하는 결과가 아닐 것이다. 그래서, 리스트 내 변형 객체가 없다면 크게 상관이 없는 경우가 많겠지만, 위와 같은 경우에 따로 변경 없이 사용하고 싶다면 깊은 복사를 해야 한다.

깊은 복사를 하는 방법은 꽤 간단하다. 파이썬에서 깊은 복사는 copy 모듈의 deepcopy()를 사용하면 된다.

import copy
list = ["a", ["b, c"]]
copy_list = copy.deepcopy(list)
copy_list[1] = "d"

print(list)
print(copy_list)

의 결과는

['a', ['b, c']]
['a', 'd']

이다. 즉, copy 모듈을 import하고, 좀 전에 list.copy() 했던 부분을 copy.deepcopy(list) 로 해주면 된다.

처음에 파이썬으로 공부를 할 때 왜 안 되는지 몰랐는데 이런 이유가 있었다. 나처럼 헤매는 사람이 이 글을 보고 쉽게 사용할 수 있으면 좋겠다.

profile
공대생입니다.

0개의 댓글