본문 바로가기
Python

08. 파이썬 튜플(tuple) 특징

by To올라운더 2023. 6. 25.
반응형

[1] 튜플(tuple) 특징

튜플이란 소괄호로 표기하는 자료형식으로 수정이 불가한 자료유형이다.

매번 강조하는 여러자료형의 특징을 비교해보면

구  분 튜플(tuple) 리스트(list) 집합(set) 딕셔너리(dictionary)
공통 사항 1개 이상의 데이터(값)들을 관리(저장)할 때 사용
형  태 소괄호 - (  ) 대괄호 - [  ] 중괄호 + 콤마 - { , } 중괄호 - { Key : Value}
순서(Index) O O X X
중복 허용 O O X (Value) X (Key)
수정 가능 X O O O

튜플은 순서가 있고 값의 중복은 허용하나, 수정이 불가하다. 

여기까지 듣는다면 수정도 불가능한 튜플을 왜 사용하는가? 라는 의문점이 들 것이다.

실제 표를 본다면 수정이 가능한 리스트가 더 상위호환 같은 느낌 마저든다.

하지만 튜플은 가장 핵심적인 장점이 있다.

바로 속도이다.

메모리 용량이나 배열 같은 어려운 용어등을 제외하고

일상생활적인 부분에서 비유해보면 수정이 불가능 하다는 건

특정한 상황에서 답이 정해져 있다는 것이고,

더 나아가 그런 상황이 오면 그 사람은 빠른 의사결정을 할 수 있다는 것이다.

 

친구 A, B와 카페에 가서 주문을 하려하는데,

친구 A는 얼죽아이다. 당연히 메뉴를 고르는 시간이 필요도 없이 아아를 주문하면 되지만,

친구 B는 평소 자신이 자주 먹는 메뉴 1, 2, 3에 더해 해당 카페의 시그니처 메뉴를 보며

한동안 고민 후 음료를 주문하게 될 것이다.

 

당연히 항상 메뉴가 정해져 있는 친구 A가 튜플, 상황에 따라 변할 수 있는 친구 B가 리스트이다.

그래서 튜플은 리스트보다 가변적인 상황을 배제 할 수 있기 때문에

더 빠른 속도(퍼포먼스)를 가질 수 있다.

 

1. 튜플 만들기(선언)

 - 튜플은 소괄호'( )' 를 이용하여 만들며, 여러가지 요소(자료 유형에 구분 없이)를 추가 할 수 있다.

   * 추가로 소괄호를 사용하지 않아도 2개 이상의 요소를 한번에 선언하면 튜플로 생성된다. 

s1 = () # 요소 없음
s2 = (1,) # 요소 뒤에 콤마, 없으면 입력 값에 따라 int 또는 stiring으로 인식
i1 = (1) # s1과 비교시 콤마 없음, int
t1 = ('1') # s1과 비교시 콤마 없음, string
s3 = 1, 2, 3 # 2개 이상의 요소를 선언하면 자동으로 튜플
s4 = (1, 2, 3) # 일반적인 방식
s5 = (1, 2, 3,) # 일반적인 방식 + ',' 추가 시 동일
s6 = (1, 2, (3, 4), [5, 6]) # 튜플 내에 튜플, 리스트 등 입력 가능

print(type(s1)) # tuple
print(type(s2)) # tuple

print(type(i1)) # int
print(type(t1)) # str

print(type(s3)) # tuple
print(type(s4)) # tuple
print(type(s5)) # tuple
print(type(s6)) # tuple

 

 

2. 튜플의 요소 수정(추가, 삭제), 불가

  - 튜플의 가장 큰 특징으로 생성 후 요소를 수정할 수 없다.

  - 튜플을 수정하기 위해서는 생성된 변수 자체를 삭제하고 재생성하여야 한다.

t1= (1,2,3)
print(t1)
del t1 # t1 전체 삭제
t1 = (4,5,6)
print(t1)

 

3. 인덱싱, 슬라이싱

 - 문자열과 동일한 방식으로 인덱싱과 슬라이싱이 가능하다.

 - 인덱싱 번호는 0 부터 시작하며, 뒤에서 부터 추출할 때는 마이너스 값도 유효하다.

  1) 인덱싱

구분 a b 1 2 (3, 4)
인덱싱 0 1 2 3 4
-5 -4 -3 -2 -1
t1 = ('a', 'b', 1, 2, (3, 4))
print(t1[0]) # 인덱스 번호로 각 요소 가져오기(인덱싱) 
print(t1[3]) # 인덱스 번호로 각 요소 가져오기(인덱싱)
print(t1[-1]) # 인덱스 번호로 각 요소 가져오기(인덱싱)

  2) 슬라이싱

  - 문자열과 동일하게 [시작인덱스 : 끝 인덱스 : 인터벌 ] 의 형태로 사용가능하다.

t1 = ('a', 'b', 1, 2, (3, 4))
print(t1[0:2]) # 0부터 2번 전까지 슬라이싱
print(t1[::-1]) # 처음부터 끝까지 역순으로 슬라이싱

4. 사칙 연산

 - 튜플은 수정이 불가하나 신규 선언 시에는 사칙 연산이 가능하다.

  1) 덧셈(+)

    : 각 요소에 추가로 요소의 덧셈이 진행된다.

t1 = ('a','b')
t2 = (1, 2, 3)
t3 = t1 + t2
print(t3) # ('a', 'b', 1, 2, 3)

 

  2) 곱셈(*)

    : 곱셈이 덧셈을 반복하는 것처럼( 2 * 3 = 2 + 2 + 2) 

      튜플의 곱셈도 각 요소가 반복적으로 추가된다.

t1 = ('a','b')
t2 = t1*3
print(t2) # ('a', 'b', 'a', 'b', 'a', 'b')

 

5. 요소의 갯수 구하기(len)

  : len 함수를 통해 요소의 갯수를 확인할 수 있다.

t1 = ('a','b','c','d','e')

print(len(t1))

6. 자료 유형 변환

  : 튜플과 리스트는 변수 선언시 해당 함수를 통해 변경할 수 있다.

t1 = ('a','b','c','d','e')
t2 = list(t1)
print(t2)
print(type(t2))

t3 = tuple(t2)
print(t3)
print(type(t3))

 

 

반응형

'Python' 카테고리의 다른 글

10. 파이썬 집합(set) 특징  (0) 2023.06.27
09. 파이썬 리스트(list) 특징  (0) 2023.06.26
07 파이썬 Boolen(참,거짓)  (0) 2023.06.24
venv 가상환경 구성하기 02(모듈 복사)  (0) 2023.06.03
venv 가상환경 구성하기 01  (0) 2023.05.30