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

파이썬 frozenset() 함수 완벽 정리 – 변경 불가능한(불변) 집합 만들기

파이썬의 frozenset() 함수는 변경 가능한(mutable) 자료형을 변경 불가능한(immutable) 자료형으로 변환할 때 사용합니다. 예를 들어, 처음에는 리스트의 요소를 자유롭게 수정하다가도 특정 시점 이후에는 더 이상 요소가 바뀌지 않도록 잠그고 싶은 경우가 있습니다. 이럴 때 frozenset() 함수를 적용하면 데이터를 안전하게 보호할 수 있습니다.

문법(Syntax)

frozenset(iterable_object_name)

frozenset()은 리스트, 튜플, 딕셔너리 등 반복 가능한(iterable) 객체를 인자로 받아, 요소를 추가·수정·삭제할 수 없는 불변 집합(frozenset 객체)을 반환합니다.

예제 코드

아래 예제에서는 먼저 리스트를 생성하고 요소를 변경한 뒤 출력합니다. 그다음 frozenset() 함수를 적용하고, 다시 요소를 변경하려고 시도해 봅니다. 두 번째 단계에서는 리스트(집합)를 더 이상 수정할 수 없다는 오류가 발생하는 것을 확인할 수 있습니다.

# frozenset() 적용 전
some_days = ["Mom", "Tue", "Wed", "Thu"]
# 요소 변경 (정상 동작)
some_days[2] = "Fri"
print("some_days =", some_days)

# frozenset() 적용
fixed_days = frozenset(some_days)
print("fixed_days = ", fixed_days)

# frozenset의 요소 변경 시도
fixed_days[2] = "Wed"

실행 결과

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

some_days = ['Mom', 'Tue', 'Fri', 'Thu']
Traceback (most recent call last):
fixed_days= frozenset({'Thu', 'Mom', 'Fri', 'Tue'})
File "/py3.py", line 14, in <module>
fixed_days[2]="Wed"
TypeError: 'frozenset' object does not support item assignment

결과 분석

frozenset() 적용 전에는 some_days[2] = "Fri"처럼 요소를 자유롭게 변경할 수 있었습니다. 하지만 frozenset()으로 변환한 fixed_days에 요소를 다시 할당하려 하자 TypeError: 'frozenset' object does not support item assignment 오류가 발생했습니다. 이는 frozenset 객체가 항목 할당(item assignment)을 지원하지 않는 불변 객체이기 때문입니다.

frozenset()의 주요 특징

  • 요소의 추가(add), 삭제(remove), 수정이 모두 불가능합니다.
  • 딕셔너리의 키(key)나 다른 집합의 요소로 사용할 수 있습니다.
  • 순서는 보장되지 않으며, 중복된 요소는 자동으로 제거됩니다.
  • 해시 가능(hashable)하기 때문에 집합 연산과 함께 안정적으로 활용됩니다.

이처럼 frozenset()은 한 번 정의된 데이터가 실수로라도 변경되지 않도록 보장해야 하는 상황에서 매우 유용하게 활용됩니다.