[Basic] 얕은 복사와 깊은 복사
2022. 11. 16. 21:01ㆍProgramming/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))
참조
'Programming > Basic' 카테고리의 다른 글
[Basic] UML (0) | 2022.12.01 |
---|---|
[Basic] AJAX란? (0) | 2022.10.19 |
[Basic] 의사코드(pseudo - code)란? (1) | 2022.09.30 |