본문 바로가기

자료구조/자료형

[Python] 깊은복사(copy 와 deepcopy)

이번 시간에는 파이썬에서 깊은복사(copy 와 deepcopy)에 대해서 알아보겠습니다.

 

 

.copy 샘플코드는 아래와 같습니다.

 

x = {'a': {'python': '2.7'}, 'b': {'python': '3.6'}}
y = x.copy()
print(x)
print(y)
print('===============')
# copy 만으로는 중첩 딕셔너리를 수정하면 충분하지 않다
y['a']['python'] = '2.7.15'
print(x)
print(y)
print('===============')
# copy 만으로 1차 딕셔너리는 수정가능하다
y['a'] = '1차 딕셔너리만수정'
print(x)
print(y)

 

실행결과

 

{'a': {'python': '2.7'}, 'b': {'python': '3.6'}}
{'a': {'python': '2.7'}, 'b': {'python': '3.6'}}
=============== # 중첩 딕셔너리인 경우, 둘다 변경됨
{'a': {'python': '2.7.15'}, 'b': {'python': '3.6'}}
{'a': {'python': '2.7.15'}, 'b': {'python': '3.6'}}
=============== # 1차 딕셔너리인 경우, y 만 변경
{'a': {'python': '2.7.15'}, 'b': {'python': '3.6'}}
{'a': '1차 딕셔너리만수정', 'b': {'python': '3.6'}}

 

 

.deepcopy 샘플코드는 아래와 같습니다.

 

x = {'a': {'python': '2.7'}, 'b': {'python': '3.6'}}
y = copy.deepcopy(x)    
# copy.deepcopy 함수를 사용하여 깊은 복사를 하면 
# 1차 딕셔너리 및 중첩 딕셔너리 수정이 가능하다
y['a']['python'] = '2.7.15'
y['b'] = '1차 딕셔너리만수정'
print(x)
print(y)

 

실행결과

 

{'a': {'python': '2.7'}, 'b': {'python': '3.6'}}
{'a': {'python': '2.7.15'}, 'b': '1차 딕셔너리만수정'}

'자료구조 > 자료형' 카테고리의 다른 글

[Flutter] Collection , Generic  (0) 2022.04.14
Map/Dict - Python, Dart, Golang  (0) 2021.11.30
List - Python, Dart, Golang(배열/슬라이스)  (0) 2021.11.29