기술(Tech, IT)/파이썬(Python)

[Python] set (세트)

Daniel803 2023. 7. 26. 10:17
# set 선언
s = set()

# list로 casting
l = list(s)

 파이썬 공식 사이트에 따른 set에 대한 설명은 아래와 같다.

: set 객체는 해시 가능한 별개의 객체들의 정렬되지 않은 컬렉션(collection이다. 멤버십 확인, 배열에서 중복 제거, 교집합, 합칩합, 차집합, 대칭 합 같은 수학 연산 계산 등에 주로 사용된다. 

 

 다른 컬렉션과 마찬가지로 set는 x in set, len(set), for x in set를 지원한다. 정렬되지 않은 컬렉션이기에 set는 요소의 위치나 삽입 순서를 기록하지 않는다. 따라서 set는 index나 slice 또는 기타 순서에 대한 동작을 지원하지 않는다.

 

 현재 기본 제공 set 유형에는 set와 frozenset 두 가지가 있다. set 유형은 가변성(mutable)을 갖는다. - add()나 remove() 같은 방법으로 내용 변경이 가능하다. 그렇기에 해시 값(hash value)는 갖지 않고 dictionary의 key 또는 다른 set의 요소로 사용이 불가하다. frozenset는 불변(immutable)하고 해시가 가능하다(hashable) - 한 번 생성이 되면 내용 변경이 불가하다; 따라서 dictionary의 key 또는 다른 set의 요소로 사용이 가능하다.

 

 set의 구현을 살펴보면 hash table을 사용하기에 어떤 요소가 포함이 됐는지 여부를 찾을 때 시간 복잡도는 O(1)이기에 O(n)인 list에 비해 빠르다. 흔히 알고리즘 문제를 풀 때 방문 여부를 확인할 때 사용하는 visit을 list로 구현했을 때보다 set로 구현할 때 빠르다.

 

 앞서 설명한 바와 같이 list와 다르게 index를 통한 접근이 불가하기에 혹 index로 접근하고 싶으면 set를 list로 캐스팅(casting) 후 사용하면 된다.

 

 

참고

- https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset