frozenset은 Python 내장 타입입니다. 변경 불가능한(immutable) 집합(set)으로, 일반 set과 동일하게 중복 제거·포함 여부 검사를 지원하지만 생성 후 수정할 수 없습니다.
frozen: frozenset[str] = frozenset({"a", "b", "c"})
KEYWORDS: frozenset[str] = frozenset({
"apple",
"banana",
"cherry",
})
# 포함 여부 검사 — O(1)
"apple" in KEYWORDS # True
"grape" in KEYWORDS # False
# 반복
for word in KEYWORDS:
print(word)
set vs frozenset# set — 변경 가능
mutable = {"a", "b"}
mutable.add("c") # OK
mutable.remove("a") # OK
# frozenset — 변경 불가
frozen = frozenset({"a", "b"})
frozen.add("c") # AttributeError 발생
상수로 정의하는 키워드 목록에는 frozenset이 적합합니다. 실수로 런타임 중 값이 바뀌는 걸 방지합니다.
# 모듈 최상단에 상수로 선언
STOP_WORDS: frozenset[str] = frozenset({
"the",
"a",
"an",
"is",
})
def filter_tokens(tokens: list[str]) -> list[str]:
return [t for t in tokens if t not in STOP_WORDS]
frozenset[str]은 타입 힌트로, 이 집합이 문자열만 담는다는 것을 명시합니다.
| 항목 | set | frozenset |
|---|---|---|
| 변경 가능 여부 | O | X |
| 중복 제거 | O | O |
| 포함 검사 속도 | O(1) | O(1) |
| 딕셔너리 키 사용 | X | O |
| 상수 정의 적합성 | 낮음 | 높음 |
한 줄 요약:
frozenset은 변경 불가능한 집합으로, 수정되어선 안 되는 키워드·필터 목록을 모듈 상수로 선언할 때set보다 안전한 선택입니다.