Python

set에 set 추가? frozenset

크레이지제이 2021. 2. 24. 13:44
반응형

파이썬으로 알고리즘 프로그래밍을 하다가 우연히 set에 set을 추가할 일이 있었다.

리스트에 리스트가 추가가 가능한 것 처럼, set도 되지 않을까??

생각해서 해보니, 안 되었다. set에는 immutable 즉, 변경불가한 데이터만 원소로 추가가 가능하였다. 

따라서 set에는 set, list 등 변화가 가능한 것들이 추가가 안 된다.

정말 안되나 하다가...  set을 추가할 방법을 찾았다. 그것은 frozenset.

한 줄 요약: 원소가 되는 set을 frozenset으로 캐스팅하여 사용한다!

더 이상 수정불가능한 immutable 타입으로 캐스팅하면 원소로 넣을 수 있다.

a = set()

# 리스트 추가 안됨.
a.add([1,2,3]) # TypeError: unhashable type: 'list'

# SET 도 추가 안됨.
b = set()
a.add(b) # TypeError: unhashable type: 'set'

# SET을 추가할 수 있는 방법??? FROZENSET!
a.add(frozenset(b)) # ok