! 앞에서 리스트 자료형에 대해서 알아보았다.
튜플은 리스트와 비슷하지만 리스트의 대괄호
[]대신 소괄호()를 사용한다.
>>> t1 = ()
>>> t2 = (1,)
>>> t3 = (1, 2, 3)
>>> t4 = 1, 2, 3
>>> t5 = ('a', 'b', ('ab', 'cd'))
t1은 아무런 요소가 없는 빈 튜플이다.t2는 숫자 1 하나만 가지고 있는 튜플이다.t3은 여러 개의 숫자를 가지고 있는 튜플이다.t4처럼 소괄호 ()를 생략해도 튜플을 만들 수 있다.t5처럼 튜플 내부에 또 다른 튜플을 넣을 수도 있다.튜플을 만들 때 주의해야 할 중요한 특징이 있다.
요소가 하나뿐인 튜플을 만들 때는 반드시 값 뒤에 쉼표(,)를 붙여야 한다.
>>> t1 = (1,)
>>> t1 = (1)
>>> type(t1)
<class 'int'>
(1)은 단순히 숫자 1을 괄호로 감싼 것이기 때문에 정수형 int로 처리된다.>>> t1 = (1,)
>>> type(t1)
<class 'tuple'>
즉, 요소가 하나인 튜플에서는 괄호보다 쉼표가 중요하다.
튜플은 다음처럼 소괄호
()를 생략해서 만들 수도 있다.
>>> t = 1, 2, 3
>>> t
(1, 2, 3)
리스트와 튜플의 가장 큰 차이는 값을 변경할 수 있는지 여부이다.
| 구분 | 리스트 | 튜플 |
|---|---|---|
| 표현 | [ ] | ( ) |
| 요소 수정 | 가능 | 불가능 |
| 요소 삭제 | 가능 | 불가능 |
| 요소 추가 | 가능 | 직접 추가 불가능 |
| 사용 목적 | 값이 자주 변경되는 경우 | 값이 변경되면 안 되는 경우 |
이처럼 값을 변경할 수 없는 특징을 불변(Immutable)이라고 한다.
튜플은 한 번 만들어지면 내부의 요소를 직접 수정하거나 삭제할 수 없다.
>>> a = [1, 2, 3]
>>> a[0] = 5
>>> a
[5, 2, 3]
튜플의 요소를
del을 사용해서 삭제해 보자.
>>> t1 = (1, 2, 'a', 'b')
>>> del t1[0]
TypeError: 'tuple' object doesn't support item deletion
즉, 튜플 내부의 특정 요소를
del로 삭제할 수 없다.
이번에는 튜플의 첫 번째 값을 변경해 보자.
>>> t1 = (1, 2, 'a', 'b')
>>> t1[0] = 'c'
TypeError: 'tuple' object does not support item assignment
a[0] = 값과 같이 특정 요소를 변경할 수 있었다.튜플은 생성된 이후 요소 자체를 직접 수정하거나 삭제할 수 없는 자료형이다.
튜플은 값을 수정하거나 삭제할 수 없다는 점을 제외하면 리스트와 사용하는 방법이 상당히 비슷하다.
튜플에서도 다음과 같은 기능을 사용할 수 있다.
문자열이나 리스트와 마찬가지로 튜플에서도 인덱싱을 사용할 수 있다.
>>> t1 = (1, 2, 'a', 'b')
>>> t1[0]
1
t1[0]은 튜플의 첫 번째 요소인 1을 의미한다.>>> t1[3]
'b'
t1[3]은 네 번째 요소인 'b'를 의미한다.리스트와 마찬가지로 파이썬의 인덱스 번호는
0부터 시작한다.
(1, 2, 'a', 'b')
↑ ↑ ↑ ↑
0 1 2 3
>>> t1[-1]
'b'
-1은 튜플의 마지막 요소를 의미한다.튜플에서도 문자열과 리스트처럼 슬라이싱을 사용할 수 있다.
>>> t1 = (1, 2, 'a', 'b')
>>> t1[1:]
(2, 'a', 'b')
t1[1:]은 인덱스 1부터 마지막 요소까지 가져온다.(2, 'a', 'b')가 된다.>>> t1 = (1, 2, 3, 4, 5)
>>> t1[1:3]
(2, 3)
1부터 인덱스 3 직전까지 가져온다.2, 3이 포함된다.슬라이싱의 기본 형태는 리스트와 동일하다.
튜플[시작:끝]
튜플도
+연산자를 사용해서 서로 연결할 수 있다.
>>> t1 = (1, 2, 'a', 'b')
>>> t2 = (3, 4)
>>> t3 = t1 + t2
>>> t3
(1, 2, 'a', 'b', 3, 4)
t1과 t2가 합쳐져 새로운 튜플 t3가 생성되었다.여기서 중요한 점이 있다.
t3 = t1 + t2
t1과 t2 내부 값이 변경된 것이 아니다.>>> t1
(1, 2, 'a', 'b')
>>> t2
(3, 4)
튜플은 수정할 수 없지만 기존 튜플을 이용해서 새로운 튜플을 만드는 것은 가능하다.
튜플도 리스트나 문자열처럼
*연산자를 이용해서 반복할 수 있다.
>>> t2 = (3, 4)
>>> t3 = t2 * 3
>>> t3
(3, 4, 3, 4, 3, 4)
(3, 4)가 3번 반복된 새로운 튜플이 생성된다.이 역시 기존 튜플을 수정한 것이 아니라 새로운 튜플을 만든 것이다.
>>> t2
(3, 4)
튜플에 몇 개의 요소가 들어 있는지 확인하려면
len()함수를 사용한다.
>>> t1 = (1, 2, 'a', 'b')
>>> len(t1)
4
튜플 t1에는 총 4개의 요소가 있으므로 4를 반환한다.
len()은 다음과 같은 여러 자료형에서 사용할 수 있다.
리스트에서는 다음과 같은 여러 메서드를 사용할 수 있었다.
append()
insert()
remove()
pop()
sort()
reverse()
>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
append() 메서드가 없다.>>> t = (1, 2, 3)
>>> t.append(4)
AttributeError: 'tuple' object has no attribute 'append'
튜플은 기존 내용을 변경하는 방식이 아니라 필요한 경우 새로운 튜플을 만들어 사용한다.
리스트와 튜플은 매우 비슷하기 때문에 처음 공부할 때 헷갈릴 수 있다.
list_a = [1, 2, 3]
tuple_a = (1, 2, 3)
| 기능 | 리스트 | 튜플 |
|---|---|---|
| 인덱싱 | O | O |
| 슬라이싱 | O | O |
+ 연산 | O | O |
* 연산 | O | O |
len() | O | O |
| 요소 수정 | O | X |
| 요소 삭제 | O | X |
| 요소 추가 | O | X |
간단하게 기억하면 다음과 같다.
리스트 = 변경 가능한 자료형
튜플 = 변경할 수 없는 자료형
튜플에서 가장 중요한 내용만 정리하면 다음과 같다.
()를 사용한다.t = (1, 2, 3)
,를 붙인다.t = (1,)
t = 1, 2, 3
t[0]
t[1:]
+를 사용해서 새로운 튜플을 만들 수 있다.t1 + t2
*를 사용해서 반복할 수 있다.t * 3
len()으로 길이를 확인할 수 있다.len(t)
t[0] = 10 # 오류
del t[0] # 오류
! 리스트와 튜플의 가장 중요한 차이
- 리스트
[]→ 값을 변경할 수 있다.- 튜플
()→ 값을 변경할 수 없다.튜플을 처음 공부할 때는 우선 이 차이만 확실하게 기억해 두면 된다.