(Python) set과 dictionary
집합 자료형 set
집합 자료형이 가지고 있는 대표적인 특징 2가지가 있다.
중복을 허용하지 않는다.
순서가 없다.
set1 = set([1,2,3])
print(set1) # {1, 2, 3}
set2 = set("banana")
print(set2) # {'n', 'b', 'a'}
set자료형의 특징 때문에 인덱싱을 통해 값을 얻을 수 없다. set에 저장된 값에 인덱싱으로 접근하고 싶을때
리스트나 튜플로 변환하면 된다.
중복을 허용하지 않는 set은 중복을 제거하기 위한 필터의 역할로 사용된다
코드로 예를 들어보자. 아래의 리스트는 다중 리스트 이다. 다중 리스트에서 과일의 이름을 중복 없이 가져오고 싶을때 set을 사용하면 쉽게 가져올 수 있다. 각각의 값에 접근하고 싶을때는 list() 를 사용하여 접근 할 수도 있다.
value_list = [['orange', 2000], ['banana', 1000], ['apple', 3000], ['orange', 2000]]
set_list = set(name for name, num in value_list)
print(set_list) # {'apple', 'banana', 'orange'}
print(list(set_list)) # ['apple', 'banana', 'orange']
mutable한 자료형 set
set은 mutable하다. 즉 만들어진 이후에 값들이 바뀔수 있음을 의미한다. 변경가능한 mutable은 id값은 일정하고 내부 값만 바뀌게 된다. 아래의 코드와 같이 x의 값이 바뀌어도 id의 값은 동일한 것을 볼 수 있다.
x = set('123')
print(type(x), id(x), x) # <class 'set'> 2390705022336 {'1', '3', '2'}
x.add('456')
print(type(x), id(x), x) # <class 'set'> 2390705022336 {'1', '3', '456', '2'}
set을 생성하는 과정에서 값을 포함하지 않는 빈 {} 를 입력할 경우 해당 자료형은 집합 자료형이 아닌 딕셔너리 자료형으로 생성된다.