본문 바로가기
Programming/python

[Python] 튜플은 값이 바뀌지 않는다?

by 유주원 2015. 3. 2.

python에서 가장 많이 안쓰는 자료형이 튜플인 것 같다.

튜플을 쓰는 용도는 거의 immutable한 데이터를 만들기 위할 때나 리턴 값을 여러개 받고 싶을 때 정도?

(하지만 리턴도 왠만하면 dictionary "key:value" 형태로 좀더 명확하게 리턴을 표현해줄 때가 더 많음)


튜플의 가장 큰 특징이 한번 설정한 값은 바꿀수 없다 정도인데.. 튜플로 설정한 값도 때로는 바꿀 수가 있다..

(읭??? 이게 먼말???)


바로 튜플안에 list가 존재하고 list 내의 아이템 값을 바꾸고자 하면 값이 바뀐다.

왜냐하면 튜플이 가지고 있는 값은 list의 참조 값이지 list의 모든 값을 저장하고 있지는 않기 때문이다.


예를 들어 아래와 같은 예제가 가능하다.


test_tuple = ('test', [1,2], True)

test_tuple[2] = False              # Error

test_tuple[1].append(3)          # Success


또한 튜플을 이용하여 아래와 같은 코딩도 가능하다.

파라미터 개수만 맞으면 암시적으로 해당 값을 매칭 시켜주는 것 같다.


tup = (4, 5, 6)

a, b, c = tup

print b                  # 5가 출력


tup = 4, 5, (6, 7)

a, b, (c,d) = tup

print d                  # 7이 출력


아래와 같은 swap도 가능하다.


tup = 4, 5

a, b = tup

print a, b              # 4 5가 출력

b, a = a, b

print a, b              # 5 4가 출력


원래 swap을 하려면 swap을 하기 위한 temp 변수를 둔 후 temp 변수에 한번 저장을 거치는 로직이 필요했는데,

python을 통해 한 줄로 swap을 표현할 수가 있다.


# 기존 swap

tup = 4, 5

a, b = tup

print a, b            # 4 5가 출력

tmp = a

a = b

b = tmp

print a, b            # 5 4가 출력