toggle menu

파이썬에서 튜플과 리스트의 차이점

2020. 4. 20. 07:42 Python

요즘 파이썬에 부쩍 관심이 많아져 열심히 공부하던 중, 머릿속에 궁금증이 하나 생겼다.

 

튜플과 리스트의 차이점은 뭘까?

 

튜플과 리스트의 차이점..?

파이썬의 코딩 규칙인 PEP 20 -- The Zen of Python에 필자가 좋아하는 문구가 하나 있다. 바로 "간결한 것이 복합적인 것보다 낫다. (Simple is better than complex.)"이다.

 

간결한 걸 추구한다며, 왜 파이썬에서는 같은(또는 비슷한) 역할을 하는 걸 2개나 만들어 놓은 걸까? 

 

다른 프로그래밍 언어, 필자가 처음으로 배운 프로그래밍 언어이자 자주 썼던 언어인 Javascript에서는 오로지 array, 즉, 파이썬으로 따지자면 리스트, 밖에 없었다.

 

필자가 모르는 튜플과 리스트에 차이점이 있었던 걸까? 하고 조사해봤더니, 역시나. 당연히 있다. 애초에 둘이 똑같은 역할을 한다면 굳이 2개를 만들 필요가 없었을 것이다.

 

이번 포스팅에서는 튜플과 리스트의 차이점을 알아보도록 하겠다.

 


튜플과 리스트의 차이점

튜플과 리스트의 차이점을 본격적으로 알아보기에 앞서, 각자 어떤 역할을 하고 어떻게 호출하는지 간단히 살펴보겠다.

 

먼저 리스트부터 살펴보겠다.

 

list = ["Gildong Hong", "Shunshin Lee", "Sihyun Kim"]
print(type(list))
print(list[0], list[1], list[2])

### 출력값 ###
<class 'list'>
Gildong Hong Shunshin Lee Sihyun Kim

 

타입은 list로 나오고, 각각 차례대로 이름을 출력하는 걸 볼 수 있다.

 

다음은 튜플을 살펴보겠다.

 

tuple = ("Gildong Hong", "Shunshin Lee", "Sihyun Kim")
print(type(tuple))
print(tuple[0], tuple[1], tuple[2])

### 출력값 ###
<class 'tuple'>
Gildong Hong Shunshin Lee Sihyun Kim

 

튜플도 다른 괄호를 사용한다는 점만 빼면 리스트처럼 같은 방법으로 호출할 수 있는 걸 볼 수 있다.

 

그렇다면 유일한 차이점은 뭘까? 

 

바로 리스트는 변할 수 있고, 튜플은 변할 수 없다는 것이다.

 

튜플은 불변성(Immutable) 타입이다.

 

아래 예제 코드를 확인해보자.

 

list = ["Gildong Hong", "Shunshin Lee", "Sihyun Kim"]
print(type(list))
print(list[0], list[1], list[2])
list[0] = "Cheolsoo Kim"
print(list[0])

### 출력값 ###
<class 'list'>
Gildong Hong Shunshin Lee Sihyun Kim
Cheolsoo Kim

 

list[0]에 저장된 "Gildong Hong"이라는 값을 "Cheolsoo Kim"으로 바꿨고, 정상적으로 "Cheolsoo Kim"을 출력하는 걸 볼 수 있다.

 

이제 tuple로 된 코드를 한번 봐보자.

 

tuple = ("Gildong Hong", "Shunshin Lee", "Sihyun Kim")
print(type(tuple))
print(tuple[0], tuple[1], tuple[2])
tuple[0] = "Cheolsoo Kim"
print(tuple[0])

### 출력값 ###
<class 'tuple'>
Gildong Hong Shunshin Lee Sihyun Kim
Traceback (most recent call last):
	File "main.py", line 4, in <module>
    	tuple[0] = "Cheolsoo Kim"
TypeError: 'tuple' object does not support item assignment

 

엇! 리스트 때의 결과와는 달리, 이번 튜플 코드에서는 에러가 발생한다. 'tuple' 유형 객체에 다른 값을 대입할 수 없다는 뜻이다.

 

이게 유일한 차이점이다. 쉽게 생각해서 list는 변수, tuple은 상수라고 생각하면 된다.

 

또한 append 메서드도 tuple에서는 사용할 수 없다. tuple은 불변이기 때문이다. (변할 수 없다.)

 

list = ["Gildong Hong", "Shunshin Lee", "Sihyun Kim"]
print(type(list))
print(list[0], list[1], list[2])
list.append("Cheolsoo Kim")
print(list[3])

### 출력값 ###
<class 'list'>
Gildong Hong Shunshin Lee Sihyun Kim
Cheolsoo Kim

 

list 같은 경우에는 요소에 append를 사용에 아이템을 추가할 수 있지만, 튜플은 할 수 없다.

 

아니, 애초에 튜플에는 append 메서드가 없다. 튜플은 수정할 수 없기 때문에, 필요가 없기 때문이다.

 

tuple = ("Gildong Hong", "Shunshin Lee", "Sihyun Kim")
print(type(tuple))
print(tuple[0], tuple[1], tuple[2])
tuple.append("Cheolsoo Kim")
print(tuple[3])

### 출력값 ###
<class 'tuple'>
Gildong Hong Shunshin Lee Sihyun Kim
Traceback (most recent call last):
  File "main.py", line 4, in <module>
    tuple.append("Cheolsoo Kim")
AttributeError: 'tuple' object has no attribute 'append'

 

에러 메시지를 보면 tuple 객체에는 append 메서드가 없다고 나와있다.

 

그럼 어떨 때 list를, 어떨때 tuple을 사용하면 좋을까?

 

list가 나중에 변할 수 있다면 list를, 변할 가능성이 없다면 tuple을 사용하는 게 좋다.

 


정리

튜플과 리스트의 유일한 차이점은 불변이냐, 아니냐다.

댓글