본문 바로가기
파이썬/기초 문법

[파이썬]튜플 이해하기 - 특성, 인덱싱, 슬라이싱, 연산

by 코키드 Cokid 2022. 10. 2.
반응형

튜플은 리스트와 굉장히 유사하다. 가장 큰 차이점은 대괄호[ ]가 아닌 괄호()로 싸서 만드는 것과 리스트는 요소값을 자유롭게 수정할 수 있는 반면 튜플은 수정할 수 없다.

 

튜플의 특성 - 튜플의 생성과 수정, 삭제

튜플(tuple) 만들기

>>> a = () # 빈 튜플 생성

>>> a = (1, 2, 3) 

>>> a = (1,) # 요소값이 하나인 튜플 생성
>>> type(a)
<class 'tuple'>

튜플을 만들 때는 괄호()를 사용한다. 리스트와 마찬가지로 빈 튜플을 사용할 수 있다. 하지만 요소값이 하나인 튜플을 만들고 싶다면 요소값 뒤에 반점을 찍어야 튜플 자료형이 된다.

 

>>> a = 1, 2, 3 # 괄호가 없이 튜플 생성
>>> type(a) 
<class 'tuple'>

>>> a = 1, # 괄호가 없이 요소값이 하나인 튜플 생성
>>> type(a) 
<class 'tuple'>

>>> a = 1, 2, (3, 4) # 튜플을 포함한 튜플
>>> a
(1, 2, (3, 4))

튜플을 만들 때 괄호를 생략할 수도 있다. 괄호를 사용하지 않아도 자료형이 튜플인걸 확인할 수 있다. 요소값이 하나인 튜플을 생성할 때는 요소값 뒤에 반점을 찍어야 한다.

또한 리스트처럼 튜플 안에 튜플을 넣을 수도 있다.

 

튜플 요소값의 수정과 삭제

>>> a = [1, 2, 3]
>>> a[0] = 5 # 리스트 a 첫 번째 요소 수정
>>> a
[5, 2, 3]

>>> a = (1, 2, 3)
>>> a[0] = 5  # 튜플은 수정이 불가능
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

튜플의 요소값은 수정과 삭제가 안 된다. 리스트는 인덱싱으로 쉽게 요소값을 바꿀 수 있으나 튜플은 요소값을 수정하려고 하면 에러가 발생한다.

 

>>> a = (1, 2, [3, 4])

>>> a[2] = [5, 4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

>>> a[2][0] = 5
>>> a
(1, 2, [5, 4])

튜플을 바꾸는 것은 안 되지만, 리스트를 포함한 튜플을 바꾸는 것은 가능하다. 정확히 말하자면 튜플 안의 리스트의 요소값을 바꾸는 것이다.

위 코드를 보자. 튜플 (1, 2, [3, 4])는 리스트 [3, 4]를 요소값으로 가지고 있는데, 이 값을 리스트 [5, 4]로 치환하려고 하니 에러가 발생했다.

하지만 리스트를 인덱싱하여 개별 요소값에 접근하니 수정이 가능했다. 마지막 코드에서 튜플 a가 (1, 2, [5, 4])로 수정된 것을 볼 수 있다.

 

>>> a = (1, 2, 3)
>>> del a # 튜플 a를 통째로 삭제
>>> a # 튜플 a가 삭제되었기 때문에, a를 호출하면 에러 발생
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

>>> a = (1, 2, 3)
>>> del a([0]) # 튜플 a의 첫 번째 요소값만 삭제, 에러 발생
  File "<stdin>", line 1
    del a([0])
        ^
SyntaxError: cannot delete function call
>>> a
(1, 2, 3)

del 함수로 튜플을 통째로 삭제할 수는 있어도 튜플의 요소값만 삭제할 수는 없다.

위 예시에서 첫 번째 코드를 보면 del 함수를 통해 튜플 a를 삭제했기 때문에 a를 호출하면 에러가 발생한다.

하지만 튜플 a의 요소값을 삭제하려고 하자 에러가 발생하여 삭제가 되지 않고 다시 a를 호출했을 때 요소값들이 그대로 있는 걸 볼 수 있다.

 

튜플의 인덱싱과 슬라이싱

튜플의 인덱싱과 슬라이싱은 리스트와 다를 것이 없기 때문에, 간단한 예시만 들겠다.

>>> a = (1, 2, 3, 'a', 'b', 'c')
>>> a[2]
3

>>> a[0]
1

>>> a[-1]
'c'

>>> a[1:-2]
(2, 3, 'a')

>>> a[:]
(1, 2, 3, 'a', 'b', 'c')

 

 

튜플의 연산 - 더하기, 곱하기

튜플의 연산 역시 리스트와 동일하기 때문에 간단하게 예시만 살펴보겠다.

>>> a = (1, 2, 3)
>>> b = ('d', 'e')
>>> a + b # '+' 연산자로 튜플 합치기
(1, 2, 3, 'd', 'e') 

>>> a * 3 # '*' 연산자로 튜플 반복
(1, 2, 3, 1, 2, 3, 1, 2, 3)

 

 

 

 

 

2022.09.29 - [파이썬/기초 문법] - [Python]리스트(list) 인덱싱 & 슬라이싱

 

반응형

댓글