터플 소개
터플은 변경불능 리스트입니다. 터플은 일단 만들어지고 나면 어떤 방식으로도 변경이 불가능합니다.
예제 3.15. 터플 정의하기
- >>> t = ("a", "b", "mpilgrim", "z", "example") ①
- >>> t
('a', 'b', 'mpilgrim', 'z', 'example')
>>> t[0] ②
'a'
>>> t[-1] ③
'example'
>>> t[1:3] ④
('b', 'mpilgrim')
① 터플은 리스트와 같은 방식으로 정의됩니다. 단, 전체 원소가 각괄호가 아니라 반괄호에 둘러 싸이는 점이 다릅니다.
② 터플의 원소는 리스트처럼 순서가 정의됩니다. 터플 지표는 리스트처럼 0부터 시작합니다. 그래서 터플의 첫 원소는 언제나 t[0]입니다.
③ 음의 지표는 리스트처럼 터플의 끝에서부터 셉니다.
④ 리스트처럼 조각썰기도 가능합니다. 리스트를 조각썰면 새로운 리스트를 얻습니다; 터플을 조각썰면 새로운 터플을 얻습니다.
예제 3.16. 터플에는 메쏘드가 없다
- >>> t ('a', 'b', 'mpilgrim', 'z', 'example')
- >>> t.append("new") ①
Traceback (innermost last):
File "", line 1, in ? AttributeError: 'tuple' object has no attribute 'append'
>>> t.remove("z") ②
Traceback (innermost last):
File "", line 1, in ?
AttributeError: 'tuple' object has no attribute 'remove'
>>> t.index("example") ③
Traceback (innermost last):
File "", line 1, in ?
AttributeError: 'tuple' object has no attribute 'index'
>>> "z" in t ④
True
① 터플에 원소를 추가할 수 없습니다. 터플은 append나 extend 메쏘드가 없습니다.
② 터플로부터 원소를 제거할 수 없습니다. 터플은 remove나 pop 메쏘드가 없습니다.
③ 터플에서 원소를 찾을 수 없습니다. 터플은 index 메쏘드가 없습니다.
④ 그렇지만, in을 사용하면 원소가 터플 안에 존재하는지 알아볼 수 있습니다.
그래서 터플을 사용하기에 좋은 곳은 어디인가?
- 터플은 리스트보다 빠릅니다. 항상 값을 상수로 정의하고서 그 값을 반복해 사용할 생각이라면 리스트 대신 터플을 사용하세요.
- 바꿀 필요가 없는 “쓰기-불가” 데이터라면 그렇게 하는 편이 코드가 더 안전합니다. 리스트 대신 터플을 사용하면 묵시적으로 assert 서술문을 사용하는 셈입니다. 이 데이터는 상수이고 오버라이드하려면 심사숙고(그리고 특정 함수)가 요구된다는 것을 보여줍니다.
- 사전의 키는 정수와 문자열 그리고 “기타 몇 가지 유형”이 될 수 있다고 말한 것이 기억나십니까? 터플이 물론 그런 유형입니다. 터플은 사전의 키로 사용할 수 있지만 리스트는 이런 식으로 사용할 수 없습니다. 실제로 그 보다 더 복잡합니다. 사전의 키는 변경불능 유형이라야 합니다. 터플 그 자체는 변경불능입니다. 그러나 터플 안에 리스트를 담고 있다면 그것은 변경 가능으로 간주되므로 사전의 키로 사용하면 안전하지 않습니다. 오직 터플 안에 문자열이나 숫자 또는 기타 사전에-안전한 터플이 들어 있어야 사전의 키로 안전하게 사용할 수 있습니다.
- 터플은 문자열 형식화와 사용됩니다. 잠시 후에 살펴보겠습니다.
☞ 터플은 리스트로 변환할 수 있으며 그 반대도 가능합니다. 내장 tuple 함수는 리스트를 취해 같은 원소를 가진 터플을 돌려주고 list 함수는 터플을 취해 리스트를 돌려줍니다. 그 효과상 tuple은 리스트를 얼리고 list는 터플을 녹입니다.
'Python' 카테고리의 다른 글
3.6. 리스트 짝짓기 (0) | 2012.01.11 |
---|---|
3.5. 문자열 형식화 (0) | 2012.01.11 |
3.4. 변수 선언 (0) | 2012.01.11 |
3.2. 리스트 (0) | 2012.01.10 |
3.1. 사전 (0) | 2012.01.10 |