728x90

python 자료형에는 tuple 이란 것도 있습니다.
tuple 은 list 와 매우 유사합니다.
tuple 이 list 와 다른 점이라면 tuple 은 element 를 추가/삭제하거나 수정할 수 없다는 것입니다. 그리고, list 는 대괄호('[]')를 사용하는 반면, tuple 은 소괄호('()')를 사용합니다.

이는 tuple 과 list 변수 하나를 만들고 dir 을 통해 두 객체의 멤버함수 list 를 확인하면 즉시 알 수 있습니다. 아래 결과를 보시면 tuple a 의 경우 해당 객체의 데이터멤버를 변경하기 위해 사용되는 함수들이 모두 제거되어 있음을 볼 수 있습니다. 오로지 count 와 index 밖에 사용할 수 없군요.

>>> a                   # tuple
(1, 2, 3)
>>> b                   # list         
[1, 2, 3]

>>> dir(a)

['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']

>>> dir(b)

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

이렇게 list 에 비해 사용할 수 있는 범위가 적다는 것 외에는 다른점이 거의 없습니다.
기본적으로 tuple 은 list 를 사용하듯이 사용하면 됩니다.

>>> a                                     # list
['ccc', 'aaaz', 'd', 'bb']
>>> a[0]                                # list element 를 접근하는 것처럼
'ccc'
>>> a = (1,2,3)
>>> a[0]                                # tuple 도 똑같이 접근하면 된다.
1
>>> len(a)                              # tuple 의 element 갯수도 list 처럼 len 을 이용한다.
3
>>> a[0] = 13                          # tuple 은 element 를 수정불가능(immutable)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> a
[1, 2, 3]
>>> a.append(4)                      # list 는 element 를 확장도 할 수 있는데
>>> a
[1, 2, 3, 4]
>>> b = (1,2,3)
>>> b.append(4)                      # tuple 은 확장이 불가능하다. appen 함수를 지원하지 않는다.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'

이러한 tuple 은 어떨 때 사용하면 편리할까 ?
tuple 은 기본적으로 element 의 갯수가 고정되어 있고, 그 element 의 값이 한번 할당되면 수정이 불가능하므로, Database 로 말하면 primary key 처럼 사용할 수 있습니다.
즉, 검색이나 정렬을 할 때 하나 이상의 숫자나 문자 조합을 검색 key 또는 정렬 key 로 사용할 때 유용하게 사용할 수 있습니다.
또는, 다수의 변수에 한꺼번에 값을 할당하고 싶을 때 사용하기도 합니다. (물론 이는 tuple 의 기능을 포함하는 list 로도 가능하긴 합니다.)

다음의 예를 볼까요 ?

>>> a = [(1,"b"), (2,"a"), (1,"a")]     # 2 개의 key 를 이용하여 sorting 할 때 사용하면 편리
>>> sorted(a)
[(1, 'a'), (1, 'b'), (2, 'a')]               # 첫번째 element 가 우선으로 정렬되고 두번째가 그 다음
>>> (x,y) = (1,2)                            # parallel assignment
>>> x
1
>>> y
2
>>> [a,b] = [1,2]                          # list 로도 parallel assignment 가능
>>> a
1
>>> b
2
>>> (x,y) = (a,b)                           # 변수 tuple 에서 변수 tuple 로 할당 가능
>>> x
1
>>> y
2
>>> (x,y) = [a,b]                          # tuple 과 list 는 성격이 같아서 element 숫자만 같으면
>>> x                                          # 서로 자유롭게 할당 가능
1
>>> y
2

 

출처 : http://cloudrain21.tistory.com/entry/파이썬python-튜플Tuple의-이용

728x90

'Python' 카테고리의 다른 글

python file  (0) 2014.05.02
python dictionary  (0) 2014.05.02
python list sorting  (0) 2014.05.02
python list2  (0) 2014.05.02
python list  (0) 2014.05.02

+ Recent posts