코딩 스쿨에 오신것을 환영합니다~~

질의응답 게시판

 
set 자료형에 대한 질문입니다.
오 * 진 | 2019-02-09

set 자료형이 어떤건지 
파이썬셸에 코드를 쳐보면서 연습하다가 궁금한점이 생겨서 질문합니다.

>>> a = set('0123456789')
>>> b = {str(i) for i in range(10)}
>>> c = {'0','1','2','3','4','5','6','7','8','9'}


이렇게 세가지 방식으로 set를 생성해도

>>> a
{'5', '2', '8', '1', '4', '0', '6', '7', '9', '3'}
>>> b
{'5', '2', '8', '1', '4', '0', '6', '7', '9', '3'}
>>> c
{'5', '2', '8', '1', '4', '0', '6', '7', '9', '3'}

이렇게 출력을 시켜보면 같은 순서로 배열이 되는걸 봤습니다.
set 은 요소의 순서를 보장하지 않는 다는데 
대신에 나름대로의 데이터를 배열하는 기준같은게 있는건가? 라는 생각이 들었는데
파이썬셸을 껐다가 다시 킨 후에 같은 내용을 쳐보니까


>>> a
{'2', '3', '9', '4', '1', '8', '6', '0', '7', '5'}
>>> b
{'2', '3', '9', '4', '1', '8', '6', '0', '7', '5'}
>>> c
{'2', '3', '9', '4', '1', '8', '6', '0', '7', '5'}

이런식으로 껏다 키기 전이랑은 배열이 다른데
한 파이썬 셸 안(?) 에서는 배열이 같게 출력이 되네요

규칙이 있는거 같기도 하고 없는거 같기도 하고 왜이런건가요?

  • 관 * 자
  • 2019-02-10 (09:01)
set는 리스트나 튜플과 달리 순서가 없고 중복을 허용하지 않습니다.
따라서 배열(또는 리스트)하고는 다르기 때문에 set 요소들의 순서는 전혀 상관없습니다.
하지만 말씀하신대로 하나의 파이썬 쉘에서는 나름 정렬하는 규칙이 있는 듯 합니다.

그러나 이러한 정렬 규칙은 무의미하기 때문에 고려할 필요가 없는 것 같습니다.

저도 파이썬 쉘을 몇 개 열어서 테스트해보니 쉘 마다 정렬방식 다르더군요. 

- 첫 번째 파이썬 쉘 테스트 
>>> a = set('0123456789')
>>> b = {str(i) for i in range(10)}
>>> c = {'0','1','2','3','4','5','6','7','8','9'}
>>> a
{'3', '0', '4', '1', '8', '9', '5', '6', '2', '7'}
>>> b
{'3', '0', '4', '1', '8', '9', '5', '6', '2', '7'}
>>> c
{'3', '0', '4', '1', '8', '9', '5', '6', '2', '7'}
>>> 

- 두 번째 파이썬 쉘 테스트

>>> a = set('0123456789')
>>> b = {str(i) for i in range(10)}
>>> c = {'0','1','2','3','4','5','6','7','8','9'}
>>> a
{'7', '4', '5', '8', '1', '2', '3', '9', '0', '6'}
>>> b
{'7', '4', '5', '8', '1', '2', '3', '9', '0', '6'}
>>> c
{'7', '4', '5', '8', '1', '2', '3', '9', '0', '6'}

set는 순서를 상관하지 않기 때문에, 파이썬 쉘에서 정렬되는 순서는 크게 신경쓰지 않으셔도 될듯합니다.^^