Python
[Python] copy(), deepcopy()의 차이 / 파이썬으로 list, array값 복사하기
쟈비쓰
2021. 9. 16. 09:41
728x90
알고리즘을 짜다보면 값을 복사해둬야 할 때가 있다.
Input 센서 값을 알고리즘에서 활용하거나, 하나의 배열(array)값을 여러 곳에 쓰거나 등등 다양한 이유가 있다.
1. copy() - Python 기본 내장 함수
단순히 같은 값을 가진 1차원 시퀀스에 대해서는 파이썬의 내장 함수인 copy()
를 쓰면 된다.
a = [1, 2, 3]
b = a.copy()
print(a) # [1, 2, 3]
print(b) # [1, 2, 3]
a[0] = 4
print(a) # [4, 2, 3]
print(b) # [1, 2, 3]
위 코드 블럭을 보면 알 수 있듯이 이렇게 복사한 list에 대해서는 값을 바꿔도 원본 list 의 값은 변하지 않는다.
즉, 이미 copy 된 list는 더 이상 원본 list에 영향을 미치지 않는다.
그렇지만 문제는 2차원 이상의 list, array에서 발생한다.
2차원인 경우 위와 유사하게 코드를 작성하면 아래와 같은 결과를 얻는다.
a = [[1, 2, 3], [4, 5, 6]]
b = a.copy()
b[0][0] = 7
print(a) # [[7, 2, 3], [4, 5, 6]]
print(b) # [[7, 2, 3], [4, 5, 6]]
이때 사용할 수 있는 방법이 copy
라이브러리를 import해서 copy.deepcopy()
를 사용하는 방법이다.
2. deepcopy()
deepcopy()
는 단순 복제를 하는 copy()
와는 달리 별개의 복제된 버전을 생성해준다.
그렇게 때문에 deepcopy된 값의 버전은 더 이상 원본에 서로 영향을 주고받지 않는다.
아래 코드에서도 확인할 수 있다.
import copy
a = [[1, 2, 3], [4, 5, 6]]
b = copy.deepcopy(a) # copy라이브러리의 deepcopy사용
b[0][0] = 7
print(a) # [[1, 2, 3], [4, 5, 6]]
print(b) # [[7, 2, 3], [4, 5, 6]]
위에서 2차원 리스트에 copy()만 사용했을 때와 달리 deepcopy된 값에 변화를 줘도 원본에 영향을 미치지 않는다.
728x90