[Basic] 얕은 복사와 깊은 복사

2022. 11. 16. 21:01Programming/Basic

[Basic] 얕은 복사와 깊은 복사

 

우리가 알고리즘 문제를 풀거나 혹은 개발을 하거나 코드를 치며 무엇인가를 할 때 기존에 있던 데이터 / 객체를 가져와서 새로운 변수에 지정해 주는 경우가 존재한다. 이때 이 과정을 복사라고 한다. 다만 이 복사라는 개념에도 두 가지 종류가 존재한다.

 

  • 얕은 복사 ( shallow copy ) : 객체의 주소값(address) 복사
    • 우리가 변수를 선언하고 객체를 선언하면 그 데이터는 컴퓨터 메모리 안에 기록이 된다. 그리고 그 메모리의 주소를 앞에서 말한 주소 값이라 한다. 즉 우리가 변수를 호출하게 된다면 컴퓨터는 해당 주소 값을 가지고 해당 메모리에 지정된 위치를 찾아간다. 그리고 그 메모리 주소에 있는 데이터를 가져와서 사용하게 되는 것이다
    • 얕은 복사의 경우 새로 생성한 변수에 이러한 주소값을 배정하게 되는 것이며 주소값을 공유하여 같은 데이터를 사용하게 된다. 즉 얕은 복사를 실행하여 복사한 객체의 값을 수정하게 되면 원본에도 영향을 끼치게 되는 것이다.
# 얕은 복사
a = 1
b = a

# 파이썬에서는 id()메서드를 통해 메모리 주소를 알 수있다.
print(id(a))
print(id(b))

 

실행값

 

  • 깊은 복사 ( deep copy ) : 객체의 실제 값(value) 복사
    • 얕은 복사가 주소값을 가져와서 해당 주소 내의 데이터를 공유한다면 깊은 복사는 해당 데이터의 값을 복사하는 것이다
    • 이때 전부를 복사하여 새로운 메모리 주소를 할당 받아서 얕은 복사와 같은 경우는 일어나지 않는다
# 파이썬에서 깊은 복사를 위한 modul
import copy

c = 2
# 사용을 할 경우 copy.deepcopy() 메서드 사용
d = copy.deepcopy(c) + 2

print(id(c))
print(id(d))

 

깊은 복사 실행 값

 

참조

https://wikidocs.net/16038

 

12. 얕은 복사(shallow copy)와 깊은 복사(deep copy)

## 1. mutable과 immutable 객체 객체에는 mutable과 immutable 객체가 있습니다. ❈ 객체 구분 표 class 설명 구분 l…

wikidocs.net

 

'Programming > Basic' 카테고리의 다른 글

[Basic] UML  (0) 2022.12.01
[Basic] AJAX란?  (0) 2022.10.19
[Basic] 의사코드(pseudo - code)란?  (1) 2022.09.30