set & frozenset
set(집합) :
특정 conditions를 만족(=집합에 속함)시키는
구별 가능한(distinct) object의 collection.
set의 중요한 수학적 특징은
- 특정 object가
set에 속하는지 아닌지를 명확히 판별(특정 conditions에 의해)할 수 있음.- 특정 conditions를 만족하면 집합에 속한다고 여김.
- 불 만족시 속하지 않음.
set에 속한 object들은 element(원소 or item)라고 부르고 이들 간은 구별 가능해야함
(동일한 object를 2개가 set에 속할 수 없음: 중복된 item을 허용하지 않음)

참고: 수학에서의 set https://dsaint31.tistory.com/679#Set%-A
이같은 특성 때문에,
- set에서 element간에는 특정한 order가 없고,
- 동일한 element(구별이 불가능한)가 2개 이상이 set에 속할 수 없다.
Python에서 이 수학적 set에 대응하는 collection이 바로 set과 frozenset 클래스임 (이 둘의 차이는 mutable여부임)
- 단, 무한 개의 element를 가지는 수학적 집합에 해당하는 클래스는 없음.
Programming에서
frozen 이라는 용어는
값의 변경이 이루어지않도록 고정된 경우를
가르키는 경우가 많음 .
수학적 집합을 다루기 위한 용도 외에 set이 활용되는 경우는 다음과 같음.
- 특정 collection에서 중복되는 item을 제거.
inmembership 연산이 set에서 매우 빠름.
엄밀하게 애기하면 set과 frozenset은 distinct element들로 구성된 collection임.
- 이 둘의 차이는 mutable한지 여부로 set: mutable, frozenset: immutable임.
- collections.abc.Set 의 sub-calss 임.
2024.02.03 - [Python] - [Python] mutable and immutable: Mutability
[Python] mutable and immutable: Mutability
MutabilityPython에서 Data Types를 구분짓는 중요 속성. Python에서 Object 는id,type,value,reference count를 가지는데,이 중 value를 변경할 수 있는지를 나타내는 것이 바로 mutability임. Mutable인 type의 object(객체)는
ds31x.tistory.com
2024.04.15 - [Python] - [Python] collections.abc
[Python] collections.abc
2023.10.06 - [Pages] - [Python] Collectionscollections.abc 와 Python의 DataStructure.Python의 Data structure는 실제적으로 collections.abc 라는 abstract base class (abc) mechanism를 통한 hierarchy로 구성된다: type은 module임.일반적
ds31x.tistory.com
생성
Python에서 set은 dict와 함께 curly bracket {,}을 사용한다.
# ---------------------
a = {}
print(f'{type(a)=}')
# type(a)=<class 'dict'>
# ---------------------
b = set()
print(f'{type(b)=}')
# type(b)=<class 'set'>
# ---------------------
c = { 3, 4, 3, 2}
print(f'{c=}')
# c={2, 3, 4}
dict와 set의 구분은 내부에서 colon :을 이용한 key-value item인지, 그냥 value로 구성된 itme인지로 이루어짐
- 단, empty set은
set()을 이용해야한다. a={}인 경우a는 dictionary임.
frozeset은 다음과 같이 생성됨 : 생성시 인자로 iterable 객체를 요구함.
fset = frozenset([1,2,3])
print(fset)
fset = frozenset(set([1,2,3]))
print(fset)
Operations and Methods for "set" and "frozenset"
A = {1,2,3}
B = {2,3,4,5}
print(A|B) # A.union(B) or B.union(A)
- union (합집합)
- \( A \cup B \)
A = {1,2,3}
B = {2,3,4,5}
print(A-B) # A.difference(B)
- difference (차집합)
- \(A - B\)
A = {1,2,3}
B = {2,3,4,5}
print(A&B) # A.intersection(B)
- intersection (교집합)
- \(A \cap B\)
A = {1,2,3}
B = {2,3,4,5}
print(A^B) # A.symmetric_difference(B)
- symmetric difference (대칭차집합)
- \((A-B) \cup(B-A)\)
A = {1,2,3}
B = {2,3,4,5}
print(A <= B) # A.issubset(B)
print(A < B) # 진부분집합인지 여부
print(A >=B) # A.issuperset(B)
print(A > B) # 진 superset 여부.
- 집합 간의 포함여부.
A = {1,2,3}
B = {2,3,4,5}
A.isdisjoint(B)
- 두 집합이 공통으로 가지고 있는 element가 없는지 여부 (없으면, True)
A = {1,2,3}
C = A.copy()
- A의 복사본으로 새로운 object를 만들어냄.
empty_set = set() # empty_dic = {} 임을 명심할 것.
- 공집합(null set or empty set)의 생성은
set()을 사용함.
Operations and Methods for set
A = {1,2,3}
A.add(4) # add 4. 중복되는 element추가시 무시됨.
print(A) # {1, 2, 3, 4}
A.remove(4) # argument에 해당하는 element 삭제. 해당 element가 없을시 에러 발생.
print(A) # {1, 2, 3}
A.discard(4) # argument에 해당하는 element 삭제하는 set고유메서드. 해당 element가 없을시 무시
print(A) # {1, 2, 3}
c = A.pop() # 임의의 element를 반환하고, 해당 element를 set에서 삭제
print(A) # {2, 3}
A.clear() # element들을 모두 삭제.
print(A) # set()
- 위의 메서드들은 대상 object를 변경시키기 때문에
- immutable인
frozenset에선 사용불가
A = {1,2,3}
B = {2,3,4,5}
A |= B # A.update(B)
A &= B # A.intersection_update(B)
A -= B # A.difference_update(B)
A ^= B # A.symmetric_difference_update(B)
- A |= B : \(A\cup B\)으로
A를 갱신. - A &= B : \(A\cap B\)으로
A를 갱신. - A -= B : \(A - B\)으로
A를 갱신. - A ^=B : \((A-B) \cup (B-A)\)으로
A를 갱신. - 대상 object를 변경시키기 때문에 immutable인
frozenset에선 사용불가
관련 ipynb.
https://gist.github.com/dsaint31x/293248e51ff257825d6c1eafe9589a04
py_set_frozenset.ipynb
py_set_frozenset.ipynb. GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
'Python' 카테고리의 다른 글
| [Python] special methods and operator overloading (0) | 2023.07.13 |
|---|---|
| [Python] list (sequence type) : summary (0) | 2023.07.12 |
| [Python] dictionary (Mapping type): basic (0) | 2023.07.11 |
| [Python] Dictionary's methods (0) | 2023.07.11 |
| [Python] 특정 점에서 직선에 수선의 발 구하기. (0) | 2023.07.11 |