얕은 복사와 깊은 복사는 객체가 중첩되는 경우에 사용된다.
얕은 복사
- 객체의 주소만을 복사하는 것으로 원본 객체와 복사본 객체는 같은 주소를 참조한다.
- copy 모듈의 copy() 메소드
import copy
original_list = [[1, 2, 3], [4, 5, 6]]
copied_list = copy.copy(original_list)
original_list[0][0] = 100 # 원본 객체의 값을 변경
print("Original List:", original_list) # [[100, 2, 3], [4, 5, 6]]
print("Copied List:", copied_list) # [[100, 2, 3], [4, 5, 6]]
- 예시 코드에서 원본 리스트의 값을 변경했는데 복사본 리스트까지 같이 함께 변경되는 것을 확인할 수 있다. 이는 위에서 설명한 바와 같이 원본 객체와 복사본 객체가 같은 중첩된 객체를 참조하기 때문이다.
깊은 복사
- 객체와 그 안에 있는 모든 객체들을 새롭게 복사하는 것이다.
- 깊은 복사를 하게되면 원본 객체와 복사본 객체는 완전히 독립된 객체가 된다.
- copy 모듈의 deepcopy() 메소드
import copy
original_list = [[1, 2, 3], [4, 5, 6]]
deep_copied_list = copy.deepcopy(original_list)
original_list[0][0] = 100 # 원본 객체의 값을 변경
print("Original List:", original_list) # [[100, 2, 3], [4, 5, 6]]
print("Deep Copied List:", deep_copied_list) # [[1, 2, 3], [4, 5, 6]]
- 예시 코드에서 원본 리스트의 값을 변경했는데 복사본 리스트는 값이 변경되지 않았다.
- 이는 원본 리스트와 복사본 리스트는 독립된 객체이기 때문이다.
사용되는 상황
- 객체의 불변성 보장이 필요한 경우
- 얕은 복사
- 객체가 불변적인 경우에는 얕은 복사로 충분할 수 있다.
- 깊은 복사
- 객체가 가변적이고, 원본과 복사본 간의 완전한 독립성이 보장된 경우에는 깊은 복사를 사용해야 한다.
- 얕은 복사
- 성능 및 메모리 사용량 고려
- 얕은 복사
- 얕은 복사는 객체가 크고 복잡한 경우에 효율적일 수 있다.
- 깊은 복사
- 깊은 복사는 모든 객체를 완전히 복사하기 때문에 메모리 사용량이 증가한다.
- 따라서 객체가 작고 간단하며, 완전한 독립성이 필요한 경우 사용하는 것이 좋다.
- 얕은 복사
성능 및 메모리 사용량 등 상황에 맞게 적절히 판단하여 효율적으로 사용하는 것이 좋다.
'개발 언어 > Python' 카테고리의 다른 글
아스키코드 사용법 (0) | 2024.05.11 |
---|---|
immutable과 mutable 객체란? (0) | 2024.05.05 |
join사용법 및 join을 사용하기 좋은 상황 (0) | 2024.04.29 |
파이썬에서 2차원 리스트를 다뤄보자 (0) | 2024.04.05 |
람다식 정렬 (0) | 2024.04.05 |