[Python] set, frozenset 차이

Yujeong·2024년 12월 5일
post-thumbnail

set과 frozenset 차이

구분set()frozenset()
순서xx
인덱스xx
변경ox
해시 값xo
사전의 키나 다른 세트의 요소로 사용xo
## set -> error
state = ("seller_name", 100, set({"apple", "banana", "cherry"}))
states_set = set()
states_set.add(state)  # TypeError: unhashable type: 'set'

## frozenset
state = ("seller_name", 100, frozenset({"apple", "banana", "cherry"}))
states_set = set()
states_set.add(state)

print(states_set) # {('seller_name', 100, frozenset({'apple', 'banana', 'cherry'}))}

set()

특징

  • 순서 없음
  • 인덱스 없음
  • 변경 가능
  • 해시 값 없음
  • 가변(mutable)
  • 사전의 키나 다른 세트의 요소로 사용할 수 없음

자주 사용하는 함수

  • 추가: add()
  • 삭제: remove(), discard
  • 크기: len()
  • 연산: &, |, -

예시

## set()
colors = {"red", "orange", "yellow", "green", "blue"}
print("colors:", colors)

# add
colors.add("black")
print("After adding black:", colors)

# size
print("size:", len(colors))

# check the element
print("black" in colors)
print("gray" not in colors)

# remove
colors.remove("orange")
print("after removing orange:", colors)

# discard
colors.discard("orange")
print("after discarding orange:", colors)

# |
print("합집합: ", numbers1 | numbers2)
print(numbers1.union(numbers2))

# &
print("교집합: ", numbers1 & numbers2)
print(numbers1.intersection(numbers2))

# -
print("차집합: ", numbers1 - numbers2)
print(numbers1.difference(numbers2))

# isdisjoint
print("서로소 집합 여부: ", numbers1.isdisjoint(numbers2))

# issubset
print("부분집합 여부: ", numbers1.issubset(numbers2))
colors: {'red', 'green', 'orange', 'blue', 'yellow'}
After adding black: {'red', 'green', 'orange', 'blue', 'black', 'yellow'}
size: 6
True
True
after removing orange: {'red', 'green', 'blue', 'black', 'yellow'}
{'red', 'green', 'blue', 'black', 'yellow
합집합:  {1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6}
교집합:  {2, 4}
{2, 4}
차집합:  {1, 3, 5}
{1, 3, 5}
서로소 집합 여부:  False
부분집합 여부:  False

frozenset()

특징

  • 순서 없음
  • 인덱스 없음
  • 해시 값 있음
  • 불변(immutable)
  • 사전의 키나 다른 세트의 요소로 사용할 수 있음

예시

### frozenset()
## add -> throws error
colors = {"red", "orange", "yellow", "green", "blue"}
palette = frozenset(colors)
print("palette:", palette)

# palette.add("black")
print("after adding black", palette)

## frozenset() 기본 활용
student = {"Name": "Gildong", "Age": "25", "Gender": "Male"}
key = frozenset(student)
print("keys", key)


## frozenset 연산 활용
numbers1 = frozenset([1, 2, 3, 4, 5])
numbers2 = frozenset([2, 4])

# |
print("합집합: ", numbers1 | numbers2)
print(numbers1.union(numbers2))

# &
print("교집합: ", numbers1 & numbers2)
print(numbers1.intersection(numbers2))

# -
print("차집합: ", numbers1 - numbers2)
print(numbers1.difference(numbers2))

# isdisjoint
print("서로소 집합 여부: ", numbers1.isdisjoint(numbers2))

# issubset
print("부분집합 여부: ", numbers2.issubset(numbers1))
palette: frozenset({'red', 'green', 'orange', 'blue', 'yellow'})
after adding black frozenset({'red', 'green', 'orange', 'blue', 'yellow'})
keys frozenset({'Name', 'Age', 'Gender'})
합집합:  frozenset({1, 2, 3, 4, 5})
frozenset({1, 2, 3, 4, 5})
교집합:  frozenset({2, 4})
frozenset({2, 4})
차집합:  frozenset({1, 3, 5})
frozenset({1, 3, 5})
서로소 집합 여부:  False
부분집합 여부:  False

참고
class set([iterable])
class frozenset([iterable])

profile
공부 기록

0개의 댓글