안녕하세요. 이번 시간에는 파이썬 tuple 활용법을 알아봅시다.

 


 예제 프로그램을 봅시다.

 

 제가 많이 쓰는 용법은 크게 3가지입니다. 튜플의 비교, 순회, 인덱스 접근. 이렇게 3개입니다. 이들은 사실, list와 비교했을 때 큰 차이가 없습니다. 3번째 줄을 보면, int를 5개 모아놓은 튜플 a와 b를 비교합니다. int는 비교 연산이 구현되어 있습니다. 그러므로, 아래와 같이 비교합니다.

 

 두 개의 tuple이 있습니다. 위에 있는 것이 tuple a고 밑에 있는 것이 tuple b라고 해 봅시다.

 

 

 첫 번째 원소를 비교합니다. 둘이 같습니다. 같으니까 2번째 원소끼리 비교합니다.

 

 두 번째 원소도 비교해 봅니다. 역시 둘 다 같네요. 세 번째로 넘어갑니다.

 

 

 그런데, 세 번째와 네 번째도 같습니다. 그러면 5번째를 비교해야 합니다. 비교해 보니까, a는 5이고 b는 7입니다. 5 < 7이므로, a < b가 됩니다. 문자열을 비교할 때 사전순 비교하는 것과 비슷한 로직을 태우는 것을 볼 수 있어요. 그래서, 튜플에 비교 가능한 것들, 특히 int가 올라가면, 상당히 편하게 compare를 할 수 있어요. 제가 낸 문제 중에, 이 문제는 이를 활용하면 파이썬으로 매우 쉽게 푸실 수 있습니다.

 

 다음에 4번째 줄과 6번째 줄에 for i in a: 이 부분과 for i in b:가 있어요. 이는 a와 b가 iterable 하기 때문에 가능합니다. 뭘 의미하나요? 전체 원소를 순회 하겠다는 의미입니다. 인덱싱도 크게 어렵지 않아요. 예를 들어 a의 0번째 원소를 뽑고 싶으면 a[0] 이렇게 입력하시면 됩니다.

 

 그러면 0번째 원소에 접근 가능합니다. 이 정도만 아시면 됩니다.

 

 하나 더 아시면 좋을 것은, tuple(iterable) 인데요. 이는 iterable한 객체에 대해서 순회한 결과를 차례대로 tuple로 돌려줍니다. 예를 들어 list li에 [2, 3, 5]가 있었다고 하면, tuple(li)는 (2, 3, 5)가 됩니다.

 

 위 프로그램의 실행 결과입니다.

 


 그런데, list하고 tuple하고 차이점이 있습니다. 전자는 mutable하지만, 후자는 그렇지 않다는 점입니다.

 

 a는 tuple이고 b는 list였어요. b[0]에 3을 넣었습니다. 이는 assign 연산이고, 값을 바꾸는 변경 연산입니다. list에 넣은 건데요. 리스트는 아시다시피, mutable 하므로, 크게 문제 없습니다.

 

 [3, 2, 3, 4, 7]로 잘 바뀐 것을 알 수 있어요.

 

 그런데, tuple은 그렇지 않아요. a[0]에 4를 넣어봅시다.

 

 그러면, item assignment를 support 하지 않는다는 에러가 뜨는데요. 이는 tuple이 불변 객체이기 때문입니다. 이 정도만 짚고 넘어가시면 크게 문제 없을 듯 싶습니다.