파이썬 튜플(Tuple) 완벽 가이드: 정의, 사용법, 리스트와의 차이점
이전 페이지 다음 페이지
튜플(tuple)은 순서가 있고 불변(immutable)인 객체 컬렉션입니다. 튜플은 리스트처럼 시퀀스입니다. 튜플과 리스트의 차이점은 튜플은 리스트와 달리 변경할 수 없고, 튜플은 괄호를 사용하는 반면 리스트는 대괄호를 사용한다는 것입니다.
튜플 생성은 다른 쉼표로 구분된 값을 넣는 것만큼 간단합니다. 선택적으로 이 값들을 괄호로 감쌀 수도 있습니다. 예를 들어:
tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5);
tup3 = "a", "b", "c", "d";
빈 튜플은 아무것도 없는 두 괄호로 작성합니다.
tup1 = ();
단일 값을 포함하는 튜플을 쓰려면 값이 하나뿐이더라도 쉼표를 포함해야 합니다.
tup1 = (50,);
문자열 인덱스처럼 튜플 인덱스는 0부터 시작하며, 슬라이싱, 연결 등이 가능합니다.
튜플 값 접근
튜플에서 값에 접근하려면 인덱스나 인덱스들과 함께 대괄호를 사용하여 슬라이싱하여 해당 인덱스에서 사용 가능한 값을 얻으세요. 예를 들어:
Live Demo
#!/usr/bin/python
tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5, 6, 7);
print "tup1[0]: ", tup1[0];
print "tup2[1:5]: ", tup2[1:5];
위 코드를 실행하면 다음 결과가 생성됩니다.
tup1[0]: physics
tup2[1:5]: [2, 3, 4, 5]
튜플 업데이트
튜플은 불변(immutable)이므로 튜플 요소의 값을 업데이트하거나 변경할 수 없습니다. 기존 튜플의 일부분을 가져와 새 튜플을 생성할 수 있습니다. 다음 예제가 이를 보여줍니다.
Live Demo
#!/usr/bin/python
tup1 = (12, 34.56);
tup2 = ('abc', 'xyz');
# 다음 행동은 튜플에서 유효하지 않음
# tup1[0] = 100;
# 따라서 다음과 같이 새 튜플 생성
tup3 = tup1 + tup2;
print tup3;
위 코드를 실행하면 다음 결과가 생성됩니다.
(12, 34.56, 'abc', 'xyz')
튜플 요소 삭제
개별 튜플 요소를 제거하는 것은 불가능합니다. 물론 원하지 않는 요소를 버린 다른 튜플을 만드는 것은 전혀 문제없습니다.
전체 튜플을 명시적으로 제거하려면 del 문을 사용하세요. 예를 들어:
Live Demo
#!/usr/bin/python
tup = ('physics', 'chemistry', 1997, 2000);
print tup;
del tup;
print "After deleting tup : ";
print tup;
다음 결과가 생성됩니다. del tup 후 튜플이 더 이상 존재하지 않으므로 예외가 발생합니다.
('physics', 'chemistry', 1997, 2000)
After deleting tup :
Traceback (most recent call last):
File "test.py", line 9, in <module>
print tup;
NameError: name 'tup' is not defined
기본 튜플 연산
튜플은 문자열과 매우 비슷하게 +와 * 연산자에 반응합니다. 여기서는 연결과 반복을 의미하지만, 결과는 문자열이 아닌 새 튜플입니다.
사실 튜플은 이전 장에서 문자열에 사용했던 모든 일반 시퀀스 연산에 반응합니다.
| 파이썬 표현식 | 결과 | 설명 |
| len((1, 2, 3)) | 3 | 길이 |
| (1, 2, 3) + (4, 5, 6) | (1, 2, 3, 4, 5, 6) | 연결 |
| ('Hi!',) * 4 | ('Hi!', 'Hi!', 'Hi!', 'Hi!') | 반복 |
| 3 in (1, 2, 3) | True | 멤버십 |
| for x in (1, 2, 3): print x, | 1 2 3 | 반복 |
인덱싱, 슬라이싱, 매트릭스
튜플은 시퀀스이므로 인덱싱과 슬라이싱이 문자열과 같은 방식으로 작동합니다. 다음 입력을 가정합니다.
L = ('spam', 'Spam', 'SPAM!')
| 파이썬 표현식 | 결과 | 설명 |
| L[2] | 'SPAM!' | 오프셋은 0부터 시작 |
| L[-2] | 'Spam' | 음수: 오른쪽부터 카운트 |
| L[1:] | ['Spam', 'SPAM!'] | 슬라이싱으로 구간 가져오기 |
구분 기호 없음
식별 기호 없이(리스트는 대괄호, 튜플은 괄호 등) 쉼표로 구분된 여러 객체 세트는 기본적으로 튜플로 간주됩니다. 다음 짧은 예제들이 이를 보여줍니다.
Live Demo
#!/usr/bin/python
print 'abc', -4.24e93, 18+6.6j, 'xyz';
x, y = 1, 2;
print "Value of x , y : ", x, y;
위 코드를 실행하면 다음 결과가 생성됩니다.
abc -4.24e+93 (18+6.6j) xyz
Value of x , y : 1 2
내장 튜플 함수
파이썬에는 다음 튜플 함수가 포함되어 있습니다.
| 번호 | 함수 및 설명 |
| 1 | cmp(tuple1, tuple2)
두 튜플의 요소 비교. |
| 2 | len(tuple)
튜플 전체 길이 반환. |
| 3 | max(tuple)
최댓값을 가진 튜플 항목 반환. |
| 4 | min(tuple)
최솟값을 가진 튜플 항목 반환. |
| 5 | tuple(seq)
리스트를 튜플로 변환. |