파이썬의 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()은 한 번 정의된 데이터가 실수로라도 변경되지 않도록 보장해야 하는 상황에서 매우 유용하게 활용됩니다.