rueki
Shallow Copy, Deep copy 본문
728x90
반응형
객체의 복사 종류로 copy, shallow copy, deep copy가 있는데 copy를 제외하고 얕은 복사, 깊은 복사라는 의미이다.
shallow copy : 복합 객체만 복사, 그 내용은 동일함
deep copy : 복합 객체 복사 + 내용도 재귀적으로 복사
의미로만 파악하면 어려우므로 예제를 통해서 보자.
예제 1. copy
a_list = [1,2,3,[4,5,6],[7,8,9]]
b_list = a_list
#result -> 같은 주소값이 나오게된다.
print('Ex1 >', id(a_list))
print('Ex1 >', id(b_list))
#변경된 것도 같이 변경되는 것으로 나온다.
b_list[3][2] = 100
print('Ex1 >', a_list)
print('Ex1 >', b_list)
a_list와 b_list의 주소값은 같으며, 하나를 수정하면 모두 수정되는 것을 확인할 수가 있다.
예제 2. shallow copy
import copy
c_list = [1,2,3,[4,5,6], [7,8,9]]
d_list = copy.copy(c_list)
#다른 주소값을 가진다.
#데이터를 복사해서 다른 주소에 넣은 것
print('Ex2 > ', id(c_list))
print('Ex2 > ', id(d_list))
d_list[1] = 100
#주소 값이 다르기에 객체가 서로 다름
print('Ex2 > ', c_list)
print('Ex2 > ', d_list)
d_list[3].append(1000)
d_list[4][1] = 10000
#리스트 안의 리스트의 경우에는 같은 주소를 공유하기 때문에 두 리스트 값이 같음
print('Ex2 > ', c_list)
print('Ex2 > ', d_list)
다차원 리스트로 선언했는데 결과적으로 내부 리스트들의 값 변경에 대해서 c와 d가 다른 값이 나오는 것을 확인할 수 있다.
예제 3. deep copy
e_list = [1,2,3,[4,5,6], [7,8,9]]
f_list = copy.deepcopy(e_list)
print('Ex3 > ', id(e_list))
print('Ex3 > ', id(f_list))
f_list[3].append(1000)
f_list[4][1] = 10000
#deep copy로 인해 내부요소까지 다른 주소값을 갖게 됨
print('Ex3 > ', e_list)
print('Ex3 > ', f_list)
deep copy는 결과적으로 완전히 다른 객체로 인식한다.
728x90
반응형
'python' 카테고리의 다른 글
CutMix 실습하기 (0) | 2021.05.07 |
---|---|
파이썬 UnderScore (0) | 2021.01.07 |
Lambda, reduce, map, filter (0) | 2021.01.05 |
Variable Scope(변수 범위) (0) | 2021.01.01 |
OpenCV로 두 가지 영상 합성해서 이어붙이기 (0) | 2020.12.02 |
Comments