Python

[Python] 얕은 복사(shallow copy) vs 깊은 복사(deep copy)

주댕이 2024. 1. 12. 13:58

# 파이썬에서 객체를 복사하는 두 가지 방법

  • 얕은 복사(shallow copy)
  • 깊은 복사(deep copy)

 

# 얕은 복사(shallow copy)

  • 얕은 복사는 새로운 객체를 생성하지만 원본의 요소에 대해서는 새로운 객체를 생성하지 않는다. 대신, 원본에 있는 객체에 대한 참조를 복사한다.
  • copy 모듈이나  list.copy(), dict.copy()와 같은 객체별 메서드를 사용하여 생성할 수 있다.
  • 전체 객체 계층 구조를 복제하지 않기 때문에 깊은 복사에 비해 빠르고 적은 메모리를 사용다.
import copy

original_list = [1, [2, 3], [4, 5]]
shallow_copied_list = copy.copy(original_list)

# 얕은 복사 리스트의 수정이 원본 리스트에 영향을 미침
shallow_copied_list[1][0] = 99

print(original_list)  # [1, [99, 3], [4, 5]]
print(shallow_copied_list)  # [1, [99, 3], [4, 5]]

 

 

# 깊은 복사(deep copy)

  • 깊은 복사는 새로운 객체를 생성하고 원본 객체 내부의 객체를 재귀적으로 복사한다. 즉, 모든 중첩된 객체에 대해 완전히 독립적인 복사본을 생성한다.
  • copy 모듈을 사용하여 생성할 수 있다.
  • 얕은 복사에 비해 메모리와 시간이 더 많이 소요될 수 있다.
import copy

original_list = [1, [2, 3], [4, 5]]
deep_copied_list = copy.deepcopy(original_list)

# 깊은 복사 리스트의 수정이 원본 리스트에 영향을 미치지 않음
deep_copied_list[1][0] = 99

print(original_list)  # [1, [2, 3], [4, 5]]
print(deep_copied_list)  # [1, [99, 3], [4, 5]]
728x90

'Python' 카테고리의 다른 글

[Python] if 문  (0) 2024.01.12
[Python] 딕셔너리(Dictionary)  (0) 2024.01.12
[Python] 문자열 포매팅(string formatting)  (2) 2024.01.11
[Python] t 검정(t-test)  (0) 2024.01.11
[Python] 클래스  (2) 2024.01.10