TIL # 117 : [Python] 얕은 복사, 깊은 복사

셀레스틴 허·2021년 4월 19일
0
post-thumbnail

1. 단순 객체 복사

변수만 복사할 경우 바라보는 객체는 동일하므로 둘 둥 하나만 수정돼도 나머지 하나도 동일하게 수정된다. 이때 객체가 mutable인지 immutable한 객체인지 확인해야 한다. 불변 객체의 경우 새로운 값을 할당할 시 같은 주소의 값이 바뀌는 것이 아니라 그 변수에 새로운 객체를 할당하는 것이기 때문이다.

id()로 고유 id 번호를 조회하면 두 변수의 id값이 똑같은 것을 확인할 수 있다. 즉 두 변수가 바라보는 객체는 동일하다는 것을 확인할 수 있다. 이 때문에 하나만 수정해도 나머지도 같이 동일하게 수정되는 것이다.

2. 얕은 복사

단순 객체 복사와 얕은 복사의 차이점은 복합 객체는 별도로 생성하지만 그 안에 들어가는 내용은 원래와 같은 객체라는 것이다.

b 변수는 .copy() 함수를 이용해 얕은 복사를 했다. a, b의 고유 아이디값이 다르다는 것을 확인할 수 있다.

그러나 얕은 복사를 한 객체 속 자식객체는 똑같은 id값을 가지고 있다.

자 이제 import copy를 통해 얕은 복사와 깊은 복사를 더 탐구할 수 있다.

copy.copy(a)를 통해 a 변수를 얕은 복사했다.

확인해보면 자식 객체 아이디값을 동일하다는 것을 알 수 있다. 얕은 복사 성공!

3. 깊은 복사

.deepcopy(a)를 통해 a 변수를 깊은 복사를 한다.

깊은 복사를 하니 변수 안에 있는 자식 객체까지 아이디값이 바뀐 것을 확인할 수 있다.

Reference:
https://blueshw.github.io/2016/01/20/shallow-copy-deep-copy/
https://pinkwink.kr/1234

profile
Software Developer / 고통은 필연, 괴로움은 선택

0개의 댓글