리스트(list)
사용빈도가 높은 녀석이다. 이 녀석은 말 그대로 자료를 리스트화해서 보관한다.
또한 보관 자료형들의 타입들이 달라도 다르지 않아도 상관없다. C언어의 경우는 보통 자료구조에 보관하는 타입이 일정하다. 만약 여러 타입을 위와 같이 보관하려면 void* 타입을 사용해야 할 것이다. 뭐 구현할 수도 있겠지만, 매우 귀찮을 것이다. 기본적으로 C언어는 타입을 체크하는 방법은 없다. 프로그래머가 하나하나 알고 있어야 한다. 타입의 사이즈는 sizeof로 알 수 있지만, 타입을 체크하는 방법은 C11의 _Generic을 이용하는 방법이 있다고 들었는데 사용해 보진 않았다.
정확히 선언된 타입이 아니면 에러를 내 뿜는 C와 달리 파이썬의 이런 유동적인 면은 편하게 보이지만, 잘못된 대입에 관용적이기 때문에 원하지 않는 값이 잘못해서 들어간 경우 문제가 생길지도 모른다는 생각이 든다.
리스트는 문자열과 같은 시퀀스(Sequence)타입이다. 때문에 리스트를 다루다 보면 '문자열과 똑같네!'라는 생각이 자주 든다. 문자열을 리스트로 치면 각 요소들이 문자 하나하나인 리스트와 비슷하다. 반면 리스트는 각 요소들이, 어떤 데이터 값이든 올 수 있다. 아무튼 시퀀스 자료형이기 때문에 문자열에서 다루었던 +, *연산, 인덱싱, 슬라이싱을 할 수 있다. 자주 다루다 보면 익숙해진다.
같은 시퀀스(Sequence) 자료형이긴 하나 다루는 함수는 문자열이 훨씬 많다. C에서 문자열과 , 리스트 등을 많이 다루어 봤다면 이해할 것이다.
append(), count(), extend(), index(), insert(), pop(), remove(), reverse(), sort() 의 함수를 갖고 있다.
각각의 함수의 기능을 알고 싶으면 위와 같이 ( 까지 쓰면 설명이 나온다.
L은 객체를 뜻하고, object는 모든 자료형의 객체를 뜻한다. 끝에 object를 추가하는 함수다.
count()
3의 값을 갖는 원소가 몇 개 인지를 반환한다.
나머지 함수들도 비슷하고, 설명할 정도로 어려운 내용은 아니다.
튜플(tuple)
이 자료형은 ()를 사용한다.
튜플의 특징은 데이터의 변경이 안 된다는 것이다. 상수와 비슷하다 생각하면 된다.
튜플형의 함수는 두 가지 뿐이다. 물론 튜플도 시퀀스(Sequence) 자료형이기 때문에 리스트와 비슷한 연산들이 가능하다. 하지만, 보통 튜플은 값이 고정된 경우에 쓰기 때문에, 가능하면 리스트를 쓴다.
인덱싱 슬라이싱 또한 가능하다. 다만 값이 한번 들어가면 지우거나 바꿀 수 없다.
함수도 그렇게 많지 않고 사용 방법도 꽤 단순하다. 처음엔 어색하나 실제로 자주 사용하다 면 매우 편하게 느낄 것이다.