파이썬 자료형 중에는 수학적 의미를 가진 '집합'의 개념이 존재합니다. 이를 파이썬에서 세트
라고 합니다.
Data Type이라고도 하며, 프로그래밍 언어에서 정수(integer), 실수(float), 문자(character), 문자열(string), 부울(Boolean : True, False 값을 가지는 데이터) 와 같은 여러 종류의 데이터를 식별하는 분류입니다.
자료형은 컴퓨터와 프로그래머에게 어떤 종류의 자료를 다루고 있는지 알려줍니다. 자료형에 따라 사용할 수 있는 연산이나 값이 제한됩니다. (ex. string - string은 안됨 : "abc"-"a" 불가 / integer-integer는 가능 : 456-3 은가능)
{ } 중괄호 안에 값을 저장하며 콤마,
로 구분해 줍니다.
set( 반복 가능한 iterable 객체 )
: return 세트 자료형의 데이터
>>> result = set('banana')
>>> result
실행결과
{'a', 'b', 'n'}
>>> result = set(range(3))
>>> result
실행결과
{0, 1, 2}
>>> result = set() # 빈 세트 만드는 법.
>>> result
실행결과
set()
result = set() 는 result={}와 같지 않음 XXXXXX dictionary로 선언되기 때문
순서가 정해져 있지 않음.
데이터 값 중복 불가.
-> 중복 데이터를 넣으면, 중복 데이터는 무시됨.
특정 요소만 출력 불가.
세트안에 세트 넣기 불가.
내용을 변경할 수 없는 세트도 있음
형식 : a = frozenset(range(10))
set안에 frozenset 넣는것은 가능
frozenset 안에 frozenset 넣는것도 가능
ex 1. result={frozenset("123"), frozenset("456")}
ex 2. result = frozenset({frozenset("123"), frozenset("456"), "789"})
or 연산자를 사용하거나 set.union(세트1, 세트2)메서드 사용
>>> a = {1, 2, 3}
>>> b = {4, 5, 6}
>>> a | b # 혹은 a |= b a = a|b 의 축약형
실행 결과
{1, 2, 3, 4, 5, 6}
>>> a = {1, 2, 3}
>>> b = {4, 5, 6}
>>> set.union(a,b)
실행 결과
{1, 2, 3, 4, 5, 6}
>>> a = {1, 2, 3}
>>> b = {4, 5, 6}
>>> a.update(b) # a에 결과가 저장됨.
실행 결과
{1, 2, 3, 4, 5, 6}
>>> a = {1, 2, 3}
>>> b = {4, 5, 6}
>>> a & b # 혹은 a &= b a = a & b의 축약형
실행 결과
set()
>>> a = {1, 2, 3}
>>> b = {4, 5, 6}
>>> set.intersection(a, b)
실행 결과
set()
>>> x = {1, 2, 3}
>>> y = {2, 3, 4}
>>> x.intersection_update(y) # x에 결과가 저장됨.
실행 결과
{2, 3}
-
연산자 사용>>> x = {1, 2, 3}
>>> y = {2, 3, 4}
>>> x - y # 혹은 x -= y
실행 결과
{1}
>>> x = {1, 2, 3}
>>> y = {2, 3, 4}
>>> set.difference(x,y)
실행 결과
{1}
>>> x = {1, 2, 3}
>>> y = {2, 3, 4}
>>> x.difference_update(y) #x에 결과가 저장됨
실행 결과
{1}
>>> x = {1, 2, 3}
>>> y = {2, 3, 4}
>>> x ^ y # 혹은 x ^= y x = x^y축약형
실행 결과
{1, 4}
>>> x = {1, 2, 3}
>>> y = {2, 3, 4}
>>> set.symmetric_difference()
실행 결과
{1, 4}
>>> x = {1, 2, 3}
>>> y = {2, 3, 4}
>>> x.symmetric_difference_update(y) # x에 결과가 저장됨
실행 결과
{1, 4}
>>> i = { 1, 2, 3, 4}
>>> j = {2, 3}
>>> i <= j
False
>>> j <= i
True
⊂
>>> i = { 1, 2, 3, 4}
>>> j = {2, 3}
>>> i.issubset(j)
False
>>> j.issubset(i)
True
>>> a= {1,2,3}
>>> b={2}
>>> a<b
False
>>> b<a
True
>>> i = {1, 2, 3, 4}
>>> j = {2, 3}
>>> i>=j
True
>>> j>=i
False
>>>
>>> i = {1, 2, 3, 4}
>>> j = {2, 3}
>>> i.issuperset(j)
True
>>> j.issuperset(i)
False
>>> alphabet={'a', 'b', 'c', 'd', 'e'}
>>> 'c' in alphabet
실행결과
True
>>> alphabet={'a', 'b', 'c', 'd', 'e'}
>>> '5' in alphabet
실행결과
False
>>> alphabet={'a', 'b', 'c', 'd', 'e'}
>>> 'c' not in alphabet
실행결과
False
>>> alphabet={'a', 'b', 'c', 'd', 'e'}
>>> '5' not in alphabet
실행결과
True
>>> alphabet={'a', 'b', 'c', 'd', 'e'}
>>> alphabet.add(5)
>>> alphabet
실행결과
{'b', 5, 'a', 'e', 'd', 'c'}
특정 요소 삭제 시, 요소가 없으면 에러를 발생시킴.
특정 요소 삭제 시, 요소가 없어도 에러 발생 X
임의 요소를 삭제한다.
모든 요소를 삭제한다.
len()함수를 사용합니다.
a 세트를 b 변수에 복사하고 싶다면 어떻게 하면 될까요? a를 선언해주고, b = a
로 할당해주면 되는 걸까요?
실상은 아닙니다.
id(매개변수) 메서드는 매개변수의 고유 주소 값( 객체가 메모리에 위치해 있는 주소 )를 나타냅니다.
a 세트 변수를 b에 복사 하고 싶다는 것은, a 세트 객체와 b세트 객체가 따로 존재해야 한다는 것을 의미합니다. 그렇게 되면, a의 주소 값과 b의 주소 값이 달라야 하는데 위를 보면 같은 메모리 번지를 참고 하고 있습니다. 하나의 객체를 가리키는 방법이 하나 더 늘어난 것 뿐이라는 의미입니다.
즉, a와 b는 같은 객체를 가리키고 있으므로 a가 수정되면 b도 수정되게 됩니다. 다음과 같이요.
a 와 b를 독립적인 다른 객체로 만들려면 copy()메서드를 사용하여 모든 요소를 복사해야 합니다. 이를 사용하여 객체를 변경하게 되면 a와 b는 독립적인 객체이므로, a의 변화가 b에 영향을 주지 않습니다.
https://dojang.io/mod/page/view.php?id=2314 - 주 내용
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C%ED%98%95 - 자료형