파이썬 기본 자료형 구분#

파이썬의 기본 자료형은 다음과 같이 구분해볼 수 있습니다.

../../_images/python_data_type_classification.png
  • Number(int, float, complex)

  • 문자열(str, bytes, bytearray, memoryview)

  • 리스트(list)

  • 튜플(tuple)

  • 사전(dict)

  • 집합(set, frozenset)

  • 부울(bool)

  • None

  • 이터레이터(Iterator)

  • 제너레이터(Generator)

보통 자료형을 나열하라고 하면 여기까지는 대답하시는 분들이 많습니다. 그런데 자료형의 특성을 이야기하고 여기에 해당하는 기본 자료형은 무엇이냐고 하면 대답을 못하는 분들이 많습니다. 그래서 이번 글에서는 파이썬의 기본 자료형을 특성에 따라 나누어보고자 합니다.

변경 가능한 자료형과 변경 불가능한 자료형#

파이썬 자료형은 변경 가능한 자료형과 변경 불가능한 자료형으로 나뉩니다. 이게 무슨 말인가 싶으시죠? 변수에 담아놓은 값의 일부를 수정할 수 있으면 변경 가능하다고 하고 수정할 수 없으면 변경 불가능하다고 합니다.

이 때 변경 가능하다를 Mutable 하다고 하고 변경 불가능하다를 ImMutable 하다고 합니다. 영어 표현은 이런저런 문서에 인터넷의 문서에 나오므로 반드시 기억해두시길 바랍니다.

파이썬에서 변경 가능한 자료형은 다음과 같습니다.

  • bytearray

  • memoryview

  • list

  • dict

  • set

변경 가능한 요소로 bytearray와 memoryview, set을 조금 더 눈여겨 보셔야 합니다.

파이썬 3에서 문자열은 유니코드 문자열과 바이트 문자열로 나누어볼 수 있습니다. 문자열의 특성상 한 번 만들면 변경할 수 없기에 변수의 타입이 유니코드 문자열이든 바이트 문자열이든 문자열의 일부를 변경할 수 없습니다.

그런데 파이썬은 바이트 문자열에 한해 바이트 문자를 bytearray와 memoryview 타입으로 만들어줄 수 있습니다. 이 타입들은 문자열의 일부로 취급되지만 메모리에서는 변경 가능한 자료형으로 취급됩니다.

파이썬에서 집합도 기본적으로 변경 가능한 요소지만 요소가 추가되고 나면 변경 불가능한 frozenset 타입이 있어서 여기에서 정확한 변수 타입으로 구분했습니다.

변경 가능한 자료형이 있다는건 변경 불가능한 자료형도 있다는 얘기가 되겠죠? 위에서 나열한 요소를 제외한 전체가 변경 불가능한 자료형입니다.

반복 가능한 자료형과 반복 불가능한 자료형#

파이썬에서 자료형 안에 담긴 개별의 값을 하나씩 꺼내올 수 있으면 해당 자료형을 “반복 가능한 자료형”이라고 하고 하나씩 꺼내올 수 없으면 “반복 불가능한 자료형”이라고 합니다.

파이썬에서 반복 가능한 기본 자료형은 다음과 같습니다.

  • 문자열(str, bytes, bytearray, memoryview)

  • 리스트(list)

  • 튜플(tuple)

  • 사전(dict)

  • 집합(set, frozenset)

  • 이터레이터

  • 제너레이터

이들 자료형은 자료형 내부에 저장되어 있는 요소를 하나씩 꺼내올 수 있습니다. 여기서 하나씩 꺼내온다는 표현에 집중할 필요가 있습니다. 하나씩 꺼내온다는게 순차적으로 접근해서 가지고 온다는 의미가 아니기 때문입니다. 이 말을 확장하면 데이터 안에 담긴 요소의 순서가 보장되지 않을 수 있다는 것입니다.

반복 가능한 자료형에서 요소를 꺼내오는 방법으로 2가지가 있습니다.

  • for문을 사용해 자료형 반복

  • next 함수를 사용해 데이터 꺼내오기

이 중 next 함수를 사용해서 데이터를 꺼내오는 방식은 변수에 담긴 데이터가 이터레이터와 제너레이터 일때로 한정합니다. 만약 next 함수로 기본 자료형의 값을 하나씩 꺼내오고 싶다면 내장 함수 iter로 이터레이터를 추출한 후 해당 이터레이터를 대상으로 가져오면 됩니다.

사전(dict) 타입은 다른 자료형과 다르게 키와 값이 하나의 요소로 취급되지만 for 문으로 자료형을 반복하면 요소를 대표하는 킷 값이 반환된다는 점을 기억해두시길 바랍니다.

반복 가능한 자료형의 영어 표기는 “Iterable” 이라고 표기합니다. 반복 가능한 자료형은 “not iterable” 하다고 합니다. 보통 반복 가능한 자료형은 여러 개의 동일한 타입의 데이터 또는 다른 타입의 데이터가 여러 개인 경우 한정합니다.

만약 bytes 자료형을 특성에 따라 표기한다면 ImMutableIterable 자료형이라고 부를 수 있는 것이죠. 이같은 영어 표기 방법을 꼭 익혀두시길 바랍니다.

순차적인 자료형과 순차적이지 않은 자료형#

파이썬의 기본 자료형 중 변수에 담긴 값에 순차적으로 접근할 수 있는 경우가 있습니다. 파이썬에서 순차적인 자료형은 다음 방법을 사용해 가져올 수 있습니다.

  • for문을 사용해 자료형 반복

  • next 함수를 사용해 데이터 꺼내오기

  • 첨자 방식으로 데이터 참조하기

여기에서 첨자 방식은 대괄호([])를 사용해 접근하는 것을 말합니다. 파이썬에서 대표적인 순차적인 자료형은 다음과 같습니다.

  • 문자열(str, bytes, bytearray, memoryview)

  • 리스트(list)

  • 튜플(tuple)

순차적인 자료형은 일반적으로 첨자 방식으로 접근하는 것이 가능합니다.

순차적인 자료형의 영어 표기는 Sequence 라고 합니다. 예를 들어 변경 가능하다의 영어 표기와 합하면 다음의 단어를 만들 수 있습니다.

MutableSequence

이 단어가 주는 의미는 변경 가능한 시퀀스 자료형입니다. 그러니까 순차적인 자료형의 의미로 끼워맞추어보면 리스트를 의미한다는 사실을 알 수 있습니다. 이 반대로 ImMutableSequence 라고 쓴다면 리스트를 제외한 나머지 자료형이 모두 해당됩니다.

특별한 이터레이터와 제너레이터#

이터레이터와 제너레이터는 기본적으로 Iterable 하지만 값을 그들이 메모리에서 만들어질 때, 반환할 때가 어떻게 다른지 이해하면 좋습니다.

먼저, 파이썬에서 이터레이터 생성은 생성과 즉시 이터레이터 내부에 순차적으로 반환할 값이 만들어집니다.

예를 들어 make_iter()라는 함수가 이터레이터를 반환한다면 make_iter() 함수 실행과 동시에 반환할 값이 순차적으로 저장된 이터레이터가 만들어진다는 것입니다.

다음으로 제너레이터입니다. 제너레이터는 next 함수 호출과 동시에 반환할 값이 만들어진다는 차이가 있습니다.

매우 큰 데이터를 처리한 결과를 파이썬에서 처리한다면 CPU나 메모리 사용량을 줄이기 위해 제너레이터를 사용하도록 만드는 것이 좋을 것입니다.

마치며#

기본적인 파이썬의 자료형은 프로그래머에게 아주 큰 날개를 달아줍니다. 이 글에서 설명한 자료형만 여러분이 잘 기억한다면 프로그램의 성능을 높게 끌어올릴 수 있을것이라 생각합니다.

파이썬을 사용하는 여러분의 앞 날에 좋은 일이 있기를 희망합니다.

from. 파이썬 수다장이 날다의 아저씨

Comments

comments powered by Disqus