rueki

Shallow Copy, Deep copy 본문

python

Shallow Copy, Deep copy

륵기 2021. 1. 5. 12:11
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