어제오늘 파이썬의 자료구조(data structure)인 list, tuple, set, dict를 학습하셨습니다. 이 4개의 자료구조는 파이썬에서는 매우 중요한 내장(built-in) 자료구조로서 영상에서 강사분이 계속 강조하시듯 정말정말 중요합니다. 이들은 파이썬을 사용하시면서 자주 접하시게 될 것입니다. 특히 list와 dict는 정말 많이 쓰는 것 같습니다.
그런데 영상에서는 이 4개의 자료구조를 (list, tuple)는 어제, (set, dict)는 오늘, 이렇게 두 개씩 나눠서 배웠습니다. 오늘은 왜 4개의 자료구조를 이와 같이 쌍을 지어 설명했는지 이들의 특징을 바탕으로 설명드리고자 합니다. (list, tuple), (set, dict)는 서로 개성과 활용법이 다른 자료구조이지만 각 쌍은 다른 자료구조에 비해 보다 공통점이 있습니다. 각 쌍을 나눈 기준을 저는 선형, 비선형으로 구분해보겠습니다.
list, tuple은 대표적으로 선형 자료구조(linear data structure)라는 공통점이 있습니다. 여기서 선형은 일단은 '자료구조 안의 자료들이 일렬로 이어져 있다'라고 생각하시면 무난합니다.
C, Java 등 타 언어에서는 list에 대응되는 자료구조로 Array(배열)가 있습니다. 그림은 그것을 이미지로 형상화했구요. 그래서 위 그림을 tuple, list에 대응해서 생각하셔도 됩니다. 사진에서 확인하시듯 자료들은 일렬로 나열되어 있고, 선(線)을 이루고 있음을 확인하실 수 있습니다.
결과, 파이썬의 내장 선형 자료구조의 특징은 인덱싱(indexing)이 가능해진다는 겁니다. 자료들은 일렬로 배치되어 있고 따라서 해당하는 위치를 호출함으로써 셀의 원소값을 구할 수 있게 됩니다. 이것이 list, tuple 선형 자료구조의 공통적인 특징이고, set, dict와 같은 비선형 자료구조와의 차이가 됩니다.
l = [1, 2, 3]
print(l[1])
2set과 dict는 비선형 자료구조(non-linear data structure)로서 선형 자료구조의 반대라고 생각하시면 됩니다. 자료들이 일렬로 배치되어 있지 않고, 따라서 자료들이 자신의 위치를 갖지 않습니다.
예를 들어보겠습니다. set은 집합을 표현하죠. 우리가 고등학생 때 배운 내용을 생각하면 집합은 원소들을 포함하되, 원소간의 순서를 만들지 않습니다. {1, 2, 3} 이라는 집합을 만든다고 할 때 '1, 2, 3'의 순서가 있는 것 같으나 실은 그냥 나열한 것뿐입니다. 이는 dict도 마찬가지입니다.
그래서 사용자 입장에서 이 자료구조들에는 인덱싱을 할 수 없습니다.
s = {1, 2, 3}
print(s[0])
TypeError: 'set' object does not support indexingd = {'name': 'park', 'age': 28}
print(d[0])
KeyError: 0무엇을 배우시든, 관련된 개념을 여러 가지 배우실 때는 이들을 어떠한 기준에 따라 분류하고 특징을 기술해보는 것이 도움이 됩니다. 이 gist에서는 4개의 자료구조를 선형 여부에 따라 분류할 수 있음을 소개해드렸습니다.
오늘 고생 많으셨습니다. :)
