앞의 글까지 파이썬의 기본적인 자료형들을 다뤘습니다. 정수, 부동소수점으로 시작하는 숫자부터 문자열, 그리고 그 안에서 조금씩은 다뤘던 불형(boolean) 데이터까지 경험해보았습니다. 이 자료형들은 파이썬에서 형태나 구조가 가장 단순한 자료형이라고 할 수 있습니다. 즉, 이 자료형으로부터 좀 더 복잡한 구조의 자료형이 만들어질 수 있습니다. 마치 원자가 결합하여 분자를 만드는 것과 동일합니다.
대부분의 컴퓨터 언어는 위와같은 원자의 나열(sequence)로 만들어지면서 각 원자들의 위치가 정수로서 인덱싱(indexing)되는 형태의 자료 구조를 갖고 있습니다. 앞서 다뤘던 문자열도 문자의 나열로 만들어지면서 각 문자의 위치가 정수로 할당되었었죠? 파이썬은 어떠한 특별한 설정 없이도 여러 가지 자료형으로 구성된 배열 구조(sequence structure)를 갖는 자료형의 조작을 지원합니다. 바로 튜플(tuple)과 리스트(list)입니다.
튜플과 리스트의 원소로는 파이썬의 어떠한 객체든 올 수 있습니다. 이를 통해 자료 구조를 더욱 깊고 복잡하게 사용자가 원하는 만큼 만들 수 있게 됩니다.
파이썬이 배열 구조로 두 가지를 지원하는 이유는 바로 가변성 때문입니다. 튜플은 불변(immutable) 자료형이고 리스트는 가변(mutable) 자료형입니다. 튜플에 어떤 객체를 할당하게 되면, 이 객체의 위치와 값은 절대 바꿀 수 없습니다. 반면 리스트는 배열 내에서 객체의 추가, 삭제, 위치 변동 등이 자유롭습니다.
이번 장에서는 파이썬의 시퀀스 자료형 중 하나인 튜플을 다뤄보고자 합니다. 불변이니 가변이니 하는 얘기는 여지껏 불변형 자료만 다뤄왔기 때문에 비교군이 없어 설명이 좀 힘들 것 같아 뺐습니다. 대신 리스트에서 불변형 자료와 가변형 자료를 비교하면서 설명한다면 독자분들이 이해하기 수월할 것 같습니다. 이번 글에서는 튜플 그 자체의 구조와 작동에 대해서 배우겠습니다.
목차
튜플(Tuple)
1. 시퀀스 데이터 타입 속성-튜플
(1). 멤버십 연산 in
(2). 크기 함수 len(seq)
(3). 슬라이싱 속성 seq[:]
(4). 반복성(iterable)
2. 튜플 연산
(1). 튜플 더하기
(2). 튜플 곱하기
3. 튜플 메서드
(1) count( )
(2) index( )
튜플(Tuple)
튜플은 쉼표(,)로 구분된 객체들로 이루어지는 불변(immutable) 자료형이자 시퀀스 자료형입니다.
튜플의 선언은 일반적으로 괄호 ( )를 이용하여 이뤄지며 이 괄호가 생략되어도 무방합니다. 튜플은 자료형의 모음을 만들 수 있는 자료형이며 튜플 안에 저장할 수 있는 자료형은 숫자, 문자열, 튜플 자신, 그리고 리스트 등 어떤 객체든 가능합니다. 우선 숫자를 저장하고 있는 튜플을 생성해봅시다.
x = (1, 2, 3, 4) print(x, type(x)) y = 2, 4, 6, 8 print(y, type(y)) |
결과)
(1, 2, 3, 4) <class 'tuple'> (2, 4, 6, 8) <class 'tuple'> |
파이썬은 print( )를 이용하여 출력할 때 괄호 없이 선언된 튜플에 대해서도 괄호와 함께 출력합니다. 괄호의 유무는 중요하지 않으며 오직 쉼표만이 튜플을 정의합니다.
문자열을 포함한 튜플이나 튜플 그 자체를 포함한 튜플을 만들 수도 있습니다.
a = 1234, '안녕' print(a) b = a, (1, 2, 3, 4) print(b) |
결과)
(1234, '안녕') ((1234, '안녕'), (1, 2, 3, 4)) |
빈 튜플은 괄호 쌍으로 생성할 수 있습니다.
empty_tuple = () print(empty_tuple) a = '안녕', print(a) b = ('안녕') print(b) |
결과)
() ('안녕',) 안녕 |
튜플은 또한 여러 변수를 한 번에 할당할 때 사용되기도 합니다.
marx_tuple = ('Groucho', 'Chico', 'Harpo') a, b, c = marx_tuple print(a) print(b) print(c) x, y, z = 3, 5, 7 print(x) print(y) print(z) |
결과)
Groucho Chico Harpo 3 5 7 |
뒤의 코드 x, y, z = 3, 5, 7 부분은 어찌 보면 x에 3을, y에 5를, z에 7을 할당하라는 선언 같지만 튜플 (3, 5, 7)을 이용한 다변수 동시 할당과 같다는 것을 알 수 있을 겁니다. 이러한 것을 튜플 언패킹(tuple unpacking)이라 합니다.
파이썬에 내장된 함수 tuple( )은 다른 자료형을 튜플로 변환할 수 있는 함수입니다. 이때 인자(argument)로는 iterator(값을 차례대로 꺼낼 수 있는 객체)가 와야 합니다. 대표적으로 리스트가 있습니다.
number_list = [1, 5, 7, 4] number_tuple = tuple(number_list) print(number_list) print(number_tuple) |
결과)
[1, 5, 7, 4] (1, 5, 7, 4) |
다시 한 번 강조합니다. 튜플은 불변 자료형이기 때문에 한 번 선언된 튜플은 값의 삽입, 삭제, 수정이 불가능합니다.
1. 시퀀스 데이터 타입 속성-튜플
(1). 멤버십 연산 in
x = '전영근', '윤영', '김현수', '명경규' print('윤영' in x) print('전현우' in x) |
결과)
True False |
(2). 크기 함수 len(seq)
x = '전영근', '윤영', '김현수', '명경규', '전현우' print(len(x)) |
결과)
5 |
(3). 슬라이싱 속성 seq[:]
x = '전영근', '윤영', '김현수', '명경규', '전현우' print(x[0]) print(x[3]) |
결과)
전영근 명경규 |
x = '전영근', '윤영', '김현수', '명경규', '전현우' print(x[0:2]) print(x[3:-1]) print(x[2:-1]) |
결과)
('전영근', '윤영') ('명경규',) ('김현수', '명경규') |
x = '전영근', '윤영', '김현수', '명경규', '전현우' print(x[0:-1:2]) |
결과)
('전영근', '김현수') |
(4). 반복성(iterable)
x = '전영근', '윤영', '김현수', '명경규', '전현우' for i in x: print(i) |
결과)
전영근 윤영 김현수 명경규 전현우 |
이와 같이 튜플은 시퀀스 타입의 데이터이므로 이 타입의 데이터가 갖는 네 가지 속성을 사용할 수 있습니다.
2. 튜플 연산
(1). 튜플 더하기
t1 = 1, 2, 'a', 'b' t2 = (3, 4) print(t1 + t2) |
결과)
(1, 2, 'a', 'b', 3, 4) |
(2). 튜플 곱하기
t1 = 1, 2, 'a', 'b' print(t1 * 3) |
결과)
(1, 2, 'a', 'b', 1, 2, 'a', 'b', 1, 2, 'a', 'b') |
3. 튜플 메서드
count( ), index( )
(1) count( )
A.count(x): 튜플 A에 담긴 항목 x의 개수를 반환합니다.
t = 1, 5, 7, 8, 9, 4, 1, 4 print(t.count(4)) |
결과)
2 |
(2) index( )
A.index(x): 항목 x의 인덱스 위치를 반환합니다.
t = 1, 5, 7 print(t.index(5)) |
결과)
1 |
'Python-기본 > Python-데이터 타입 및 자료 구조' 카테고리의 다른 글
Python-컬렉션 데이터 타입(1. 셋) (0) | 2021.01.05 |
---|---|
Python-3. 시퀀스 데이터 타입(3. 리스트) (0) | 2021.01.04 |
Python-3. 시퀀스 데이터 타입(1. 문자열) (0) | 2020.12.20 |
Python-2. 숫자 데이터 타입 다루기 (0) | 2020.12.14 |
Python-1. 변수, 변수명, 객체 (0) | 2020.10.14 |