호기심 많은 분석가
[Python] Copy VS Deep Copy 본문
포스팅의 제목은 Copy VS Deep Copy로 작 상하였지만, 실제로는 Shallow Copy(얕은 복사)와 Deep Copy(깊은 복사)의 차이다. 우리는 작업을 하다가 데이터를 여러 방면에서 뜯어보아야 할 때 copy() 메서드를 통해 데이터를 복사해두곤 한다. 하지만 이 작업은 위험할 수 있다. 왜 그렇고, copy와 deep copy는 어떤 차이점을 가질까?
1. Shallow Copy(얕은 복사)
- 객체를 복사할 때, 해당 객체만 복사하여 새 객체를 생성한다.
- 복사된 객체의 인스턴스 변수는 원본 객체의 인스턴스 변수와 같은 메모리 주소를 참조한다
- 따라서, 해당 메모리 주소의 값이 변경되면 원본 객체 및 복사 객체의 인스턴스 변수 값은 같이 변경된다.
2. Deep Copy(깊은 복사)
- 객체를 복사할 때, 해당 객체와 인스턴스 변수까지 복사하는 방식
- 전부를 복사하여 새 주소에 담기 때문에 참조를 공유하지 않는다.
예를 통해 이해를 쉽게 해보자. 아래와 같이 copy의 경우 재할당하는 것이 아닌 a[0]에 값을 append 해주었을 때, b의 값도 같이 변함을 알 수 있다. 따라서 작업을 하다가 원본 데이터를 변화시킬 때, 복사한 데이터도 함께 변하는 것을 원하지 않는다면 copy라이브러리의 deepcopy를 활용하기를 추천한다. :)
import copy
a = [[1, 2], [3, 4]]
b = a.copy()
print(b) # [[1, 2], [3, 4]]
a[0].append(5)
print(b) # [[1, 2, 5], [3, 4]]
import copy
a = [[1, 2], [3, 4]]
b = copy.deepcopy(a)
print(b) # [[1, 2], [3, 4]]
a[0].append(5)
print(b) # [[[1, 2], [3, 4]]
'Coding > Machine Learning & Python' 카테고리의 다른 글
[Python] 로그함수(logarithmic function) np.log1p(z) (0) | 2021.06.03 |
---|---|
[Python] for문 VS While문 / for문 무한loop (0) | 2021.06.01 |
[Python] f-string 문자열 리터럴 (0) | 2021.05.28 |
[Machine Learning] LightGBM, LGBM에 대해 알아보자 (0) | 2021.05.18 |
[Machine Learning] 카테고리 변수를 다루는 법 (2) | 2021.05.12 |