[python] Iterable과 Sequence

김민석·2024년 3월 31일
0

python

목록 보기
5/5

Iterable

컴퓨터에서 iterable하다는 것은 반복 가능하다는 의미이다.

음... 뭔가 추상적이다. 그렇다면 반복 가능하다는 것은 무엇일까?

반복 가능하다는 것

일상 생활에서 반복이란 개념은 어떤 패턴이 연속적으로 똑같이 나타나는 것이다.
1, 2, 2, 3, 3, 3, 1, 2, 2, 3, 3, 3, 1, 2, 2, 3, 3, 3 이런식으로 말이다.

하지만 컴퓨터에서 반복 가능하다는 것은 반복문에 활용할 수 있다는 것이다.

반복문에 활용할 수 있기 위해서는 어떤 특징이 있어야 할까? 반복문에 활용하기 위해서는 자료구조의 모든 element들을 중복되지 않게 한번씩 접근할 수 있어야 한다. 그리고 이를 위해서는 어떤 element에 접근했을 때 다음으로 접근할 element를 무엇으로 할지 분명하게 정할 수 있어야 한다.

파이썬에서 iterable한 자료구조로는 list, tuple, string, set, dictionary 등이 있다.

Set과 Dictionary가 iterable한 자료구조?

List와 tuple이 iterable 자료구조인 것은 자연스럽게 이해할 수 있다. 그냥 index 0부터 시작해서 하나씩 차례대로 다음 element에 접근하면 된다.

그런데 set과 dictionary가 iterable 자료구조인 것은 자연스럽게 받아들여지지 않는다. Set과 dictionary는 list와는 달리 순서가 정해져있지 않는 자료구조이기 때문에 애초에 다음에 접근할 element를 정할 수 없을 거라고 생각했다. 하물며 접근할 수 있다고 해도 element에 접근하는 과정에서 한번씩 접근하는게 아니라 중복이 일어나지 않을까 라는 생각 때문에 그랬다.

Set과 dictionary가 interable 자료구조인 이유는 set과 dictionary를 구현하는데 사용하는 hash table이 근본적으로는 dynamic array이기 때문이다. 그렇기 때문에 그 dynamic array를 하나씩 조회하면 element들을 중복되지 않게 한번씩만 접근할 수 있다. 즉, iterable하다는 것이다. 물론, element들의 순서는 뒤죽박죽일 것이다. 왜냐하면 element들이 hash function를 통해 나온 hash값에 따라 dynamic array에 저장되기 때문이다.

Sequence

Sequence는 element의 순서를 보장하는 자료구조이다.

음... element의 순서를 보장한다는 표현도 좀 추상적이다.

순서가 보장되어있다는 것은 무엇일까?

순서가 보장되어있다

더 쉽게 이해하기 위해서 sequence가 아닌 자료구조를 알아보자. Set은 파이썬에서 sequence가 아닌 대표적인 자료구조이다. 개발자는 set을 처음 만들 때 그리고 set에 element를 삽입, 삭제할 때 set을 구성하는 hash table의 index 중에서 element가 들어갈 index가 무엇인지 알 수 없다. Element가 들어갈 index는 해당 element가 hash function을 통과해서 나온 hash값에 따라 달라지기 때문이다. 따라서 Set의 element의 순서를 개발자는 의도적으로 조작할 수 없다.

순서가 보장되어있다는 것은 element의 순서를 개발자가 의도한 대로 만들 수 있다는 것이다.

sequence 자료구조의 대표적인 예로는 list, tuple, string이 있다. 이 자료구조들은 element의 순서가 보장되어있다. 자료구조를 만들 때, 새로운 element를 삽입하거나 element를 삭제할 때, element의 순서는 개발자가 의도하는대로 맞춰진다.

profile
명품개발자지망생

0개의 댓글