본문 바로가기

언어/Python

[파이썬 기초] 얕은 복사(Shallow copy)와 깊은 복사(Deep copy)

1. 일반적인 복사

= 을 이용해 다른변수에 같은 값을 할당해주는 복사이다. 변수만 다르고 같은 메모리를 가리키기 때문에 2개의 주소는 같다. 따라서 하나의 값을 바꿔주면 나머지도 같이 바뀌게 된다.

 

2. 얕은 복사 (Shallow copy)

파이썬 내장함수 copy()를 이용한 복사이다. 주소를 복사한 것이 아닌 메모리 값을 복사한 것이기 때문에 주소값이 다르다. 변수도 2개고 메모리도 2개인 것이다.

 하지만 여기서 중요한 것은 2차 리스트의 껍데기만 복사됬다는 것이다. L = [1,[  ], [  ]] 만 메모리가 2개인 것이고 그 안의 [2,3] 과 [4,5]는 아직도 하나로 같은 값을 가리키고 있다.

 따라서 위의 예제처럼 L[0]의 값을 수정할 때에는 L값만 바뀌지만 L[1][1]값을 수정할 때에는 L과 K가 둘다 바뀌는 모습을 알 수있다. 이를 해결하는 방법이 깊은복사이다.

 

3. 깊은 복사 (Deep copy)

깊은 복사는 copy 모듈에 있는 함수로서 다중 자료구조일 경우 내부의 값까지 모두 복사되는 함수이다. 따라서 위의 예제를 보면 L[1][1]의 값을 수정하더라도 L의 값만 바뀌는 것을 알 수 있다.

 

 

****정리****

-일반 복사(주소값 복사) : 변수의 주소 같음, 값이 같이 바뀜.

-얕은 복사(Shallow copy) : 변수의 주소 다름, 껍데기 메모리만 복사, 껍데기의 값은 따로 바뀌지만 내부값은 같이 바뀜.

-깊은 복사(Deep copy) :  변수의 주소 다름, 모든 메모리 복사, 모든 값이 따로 바뀜.