Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 set copy() 메서드 완벽 정리: 얕은 복사(Shallow Copy)의 이해

이 튜토리얼에서는 파이썬 set(집합) 자료구조에서 사용할 수 있는 copy() 메서드에 대해 자세히 알아보겠습니다.

copy() 메서드는 집합(set)의 얕은 복사(shallow copy)를 생성하는 데 사용됩니다. 단순 대입 연산자(=)를 사용한 복사와는 어떤 차이가 있는지, 다양한 예제를 통해 확인해 보겠습니다.

일반 복사 (대입 연산자 사용)

먼저 아래 순서에 따라 코드를 작성하고 결과를 살펴보겠습니다.

  • 집합(set)을 하나 초기화합니다.
  • 대입 연산자(=)를 사용해 집합을 다른 변수에 할당합니다.
  • 복사된 집합에 새로운 요소를 하나 추가합니다.
  • 두 집합을 모두 출력합니다.

결과를 보면 두 집합 사이에 어떤 차이도 발견할 수 없습니다. 그 이유는 대입 연산자는 집합 자체가 아닌 참조(reference)를 반환하기 때문입니다. 즉, 두 변수는 메모리상의 동일한 객체를 가리키고 있으므로, 한쪽에 가한 변경 사항이 다른 쪽에도 그대로 반영됩니다.

예제 코드

# 집합 초기화
number_set = {1, 2, 3, 4, 5}
# 대입 연산자로 다른 변수에 할당
number_set_copy = number_set
# number_set_copy에 요소 추가
number_set_copy.add(6)
# 두 집합 출력
print(f"Set One: {number_set}")
print(f"Set Two: {number_set_copy}")

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Set One: {1, 2, 3, 4, 5, 6}
Set Two: {1, 2, 3, 4, 5, 6}

예상했던 것처럼, 두 번째 집합을 변경했는데도 첫 번째 집합까지 함께 변경된 것을 확인할 수 있습니다. 그렇다면 이러한 문제를 어떻게 피할 수 있을까요?

copy() 메서드를 활용한 얕은 복사

파이썬에서는 집합을 복사하는 여러 가지 방법이 있으며, 그중 하나가 바로 set 객체의 copy() 메서드를 사용하는 것입니다. 이 메서드를 사용하면 원본 집합과는 별개인 새로운 집합 객체가 생성되므로, 서로에게 영향을 주지 않고 안전하게 데이터를 수정할 수 있습니다.

예제 코드

copy() 메서드를 활용한 예제를 살펴보겠습니다.

# 집합 초기화
number_set = {1, 2, 3, 4, 5}
# copy() 메서드로 얕은 복사
number_set_copy = number_set.copy()
# number_set_copy에 요소 추가
number_set_copy.add(6)
# 두 집합 출력
print(f"Set One: {number_set}")
print(f"Set Two: {number_set_copy}")

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Set One: {1, 2, 3, 4, 5}
Set Two: {1, 2, 3, 4, 5, 6}

출력 결과를 보면, 복사본에만 변경이 적용되었고 첫 번째 집합에는 아무런 영향이 없는 것을 확인할 수 있습니다.

참고: copy() 외의 다른 복사 방법

copy() 메서드 외에도 set(number_set)처럼 set 생성자를 이용하거나, number_set.copy() 대신 슬라이싱 문법은 지원하지 않지만 {*number_set}과 같은 언패킹 방식으로도 얕은 복사를 수행할 수 있습니다. 상황에 맞는 방법을 선택해 사용하시면 됩니다.

마무리

지금까지 파이썬 set 자료형의 copy() 메서드와 일반 대입 연산자를 통한 복사의 차이점에 대해 알아보았습니다. 핵심은 대입 연산자는 참조만 전달한다는 점, 그리고 copy() 메서드는 독립적인 새 객체를 만든다는 점입니다. 튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨주세요!