본문 바로가기

Software Engineering/Python

Python - Shallow Copy와 Deep Copy의 차이점 및 사용법

반응형

Shallow Copy와 Deep Copy의 차이점 및 사용법

파이썬 개발자로서 코드를 작성하다 보면 객체를 복사해야 하는 상황이 자주 발생합니다. 객체를 복사하는 방법에는 크게 두 가지가 있습니다: Shallow Copy(얕은 복사)와 Deep Copy(깊은 복사). 이 두 가지 복사 방식은 동작 방식과 결과가 다르기 때문에, 언제 어떤 방식을 사용해야 하는지 정확히 이해하는 것이 중요합니다.

Shallow Copy (얕은 복사)

특징

Shallow Copy는 객체의 가장 바깥쪽 객체만 복사하고, 그 객체가 참조하는 내부 객체들은 원본 객체와 동일하게 참조하는 방식입니다. 즉, 복사된 객체 내부의 가변 객체(리스트, 딕셔너리 등)는 원본 객체와 동일한 참조를 가리키게 됩니다.

사용법

파이썬에서 얕은 복사는 copy 모듈의 copy 함수를 사용하거나, 리스트의 경우에는 슬라이싱을 이용해 생성할 수 있습니다.

코드 예시

import copy

# 원본 리스트 생성
original_list = [[1, 2, 3], [4, 5, 6]]

# 얕은 복사 생성
shallow_copied_list = copy.copy(original_list)

# 값 변경
shallow_copied_list[0][0] = 99

print("원본 리스트:", original_list)
print("얕은 복사 리스트:", shallow_copied_list)

예상결과값

원본 리스트: [[1, 2, 3], [4, 5, 6]]
깊은 복사 리스트: [[99, 2, 3], [4, 5, 6]]

위의 코드에서 shallow_copied_list의 내부 리스트 요소를 변경하면, original_list도 영향을 받습니다. 이는 얕은 복사가 내부 객체를 동일하게 참조하기 때문입니다.

Deep Copy (깊은 복사)

특징

Deep Copy는 객체와 그 객체가 참조하는 모든 객체를 재귀적으로 복사하여 완전히 독립적인 복사본을 만듭니다. 따라서 복사된 객체와 원본 객체는 서로 전혀 영향을 주지 않습니다.

사용법

파이썬에서 깊은 복사는 copy 모듈의 deepcopy 함수를 사용합니다.

코드 예시

import copy

# 원본 리스트 생성
original_list = [[1, 2, 3], [4, 5, 6]]

# 깊은 복사 생성
deep_copied_list = copy.deepcopy(original_list)

# 값 변경
deep_copied_list[0][0] = 99

print("원본 리스트:", original_list)
print("깊은 복사 리스트:", deep_copied_list)

예상 결과값

원본 리스트: [[1, 2, 3], [4, 5, 6]]
깊은 복사 리스트: [[99, 2, 3], [4, 5, 6]]

위의 코드에서 deep_copied_list의 내부 리스트 요소를 변경해도 original_list는 영향을 받지 않습니다. 이는 깊은 복사가 모든 객체를 재귀적으로 복사하여 독립적인 객체를 생성하기 때문입니다.

언제 사용해야 할까?

  • Shallow Copy는 복사된 객체와 원본 객체가 일부 데이터를 공유해도 상관없을 때 사용합니다. 예를 들어, 불변 객체나 단순한 데이터 구조를 사용할 때 적합합니다.
  • Deep Copy는 복사된 객체와 원본 객체가 완전히 독립적이어야 할 때 사용합니다. 예를 들어, 중첩된 데이터 구조가 있는 경우나 복사본이 원본 데이터에 영향을 주지 않도록 보장해야 하는 경우에 사용합니다.

결론

파이썬에서 Shallow Copy와 Deep Copy는 각각의 특성과 용도에 맞게 적절히 사용해야 합니다. Shallow Copy는 객체의 가장 바깥쪽만 복사하고 내부 객체는 참조를 공유하는 반면, Deep Copy는 모든 객체를 재귀적으로 복사하여 독립적인 복사본을 만듭니다. 이를 잘 이해하고 상황에 맞게 활용하면 더 안정적이고 예측 가능한 코드를 작성할 수 있습니다. 파이썬의 copy 모듈을 통해 쉽게 Shallow Copy와 Deep Copy를 구현할 수 있으니, 필요에 따라 적절한 방법을 선택하여 사용하시기 바랍니다.

 

참고자료

Understanding the Difference Between Shallow Copy, Deep Copy, and References in Python
 

Understanding the Difference Between Shallow Copy, Deep Copy, and References in Python

Understanding shallow and deep copy in Python is crucial for effective data manipulation and maintaining data integrity. These concepts are essential when working with complex data structures like lists and dictionaries.

www.linkedin.com

 

반응형