파이썬에는 tuple이 있습니다. 순서 타입 중 하나입니다. 이것에 대해서 예제 프로그램을 보면서 간략하게 알아봅시다.

 


 먼저, 튜플은 (2, 3, 5)와 같이 쓸 수 있습니다. 처음에 p가 어떤 클래스의 객체인지 찍어 보았습니다. 다음에, 3번째 loop에서 p에 있는 전체 원소들을 순회합니다.

 

 

 디버그 창으로 변수를 보니, 그냥, 2, 3, 5가 저장이 되어 있음을 볼 수 있습니다.

 

 

 실행 결과는 위와 같습니다. 일단, 순회가 가능합니다. 리스트도 분명 이런 연산이 가능했습니다.

 

 

 예제 2를 봅시다. 이것도 하는 일은 단순합니다. 3번째 줄부터 4번째 줄 까지는 p에 있는 요소들을 모두 순회합니다. 그리고, 5번째 줄부터 6번째 줄까지는, li에 있는 것을 모두 순회합니다. 이 둘이 순회 가능하니, 저렇게 써도 문제가 없습니다.

 

 

 실행 결과는 2, 3, 5, 2, 3, 5가 나옵니다.

 


 인덱싱도 가능합니다. p[2]를 출력해 봅시다.

 

 

 그러면 5가 출력됩니다. c++에서 stl을 쓸 때, pair를 많이 쓰곤 했습니다. 기하 알고리즘으로 문제를 풀 때 유용한데요. pair는 first와 second가 있습니다. 여기에는 그냥 p[0]과 p[1]을 출력하기만 하면 됩니다. 똑같은 역할을 합니다. 생각보다 편해 보입니다. 저는, 이걸 알고 나서, 엄청나게 많이 써먹었습니다.

 

 

 위 예제는, 튜플에 저장된 것들을 꺼내오는 것입니다. unpacking을 하는데요. x에 1, y에 2를 넣습니다.

 

 

 실행 결과는 위와 같습니다.


 비슷해 보이는 list와의 차이점 중 하나는, 튜플은 immutable 하다는 것입니다. 더 정확히 말하면, assignment 연산과 같은 변경 연산을 지원하지 않습니다. java의 UnmodifiableCollection과 비슷한 점이 있습니다.

 

 

 위에 예제를 실행시켜 봅시다.

 

 

 그러면, 이 오브젝트가 해당 연산을 지원하지 않는다고 나와 있어요. 그렇기 때문에, p 안에 있는 참조값들을 바꾸지는 못합니다. 즉, 내부 요소가 가리키는 object를 바꾸지 못한다는 것입니다. 그런데, 가리키는 object를 바꾸지 못할 뿐이지, 실제 가리키는 내용의 객체는 얼마든지 바꿀 수 있습니다. mutable 한 경우에는요.

 

 이 내용은 UnmodifiableCollection을 설명한 이 글에서도 언급했던 기억이 납니다.

 

 

 p에는 [2], [3], [5]가 저장되어 있습니다.

 

 그러면, 메모리 상에 이렇게 저장이 될 겁니다. 여기서 노란색은 변경 가능한 mutable한 객체를 의미합니다. list가 그 예입니다.

 

 

 그러면, p[0][0] = 4 이렇게 바꾸었다면, 사실 p[0]의 0번째 인덱스에 있는 원소를 2에서 4로 바꾼 것이고, list 연산에서 이것은 vaild 합니다. 따라서, 해당 예제의 실행 결과는 아래와 같습니다.

 

 

 ([4], [3], [5]). 제가 기대했던 것은, ([2], [3], [5]) 였습니다. 이 정도만 조심하시면 될 듯 합니다. 제가 언급드린 것 말고도, 더 많은 연산들을 지원하는데요. 공식 문서를 참고하시면 좋을 듯 싶습니다.