튜플은 서로 다른 데이터 타입을 저장
할 수 있는 container이며 immutable
특징을 갖고 있는 불변임!
두 번째 프린트문은 패킹해서 값을 보냄.
세 번째 값은 아예 정수로 풀어내버림
print('ex5-1 -', divmod(100,9))
print('ex5-2 -', divmod(*(100,9)))
print('ex5-3 -', *(divmod(100,9)))
# 결과:
# ex5-1 - (11, 1)
# ex5-2 - (11, 1)
# ex5-3 - 11 1
x,y , *rest = range(10)
print('ex5-4 -', x,y,rest) # 2~9까지 값이 리스트로 묶어벼림
# 결과: ex5-4 - 0 1 [2, 3, 4, 5, 6, 7, 8, 9]
2부터 9까지 리스트 값으로 묶인채 값이 반환 되는 걸 볼 수 있음
x,y , *rest = 1,2,3,4,5,6
print('ex5-5 -', x,y,rest) #
# 결과: ex5-5 - 1 2 [3, 4, 5, 6]
이를 통해서 메서드에 왜? def test(*args, **kwargs)
로 인자를 받는지 파악 할 수 있음.
리스트는 값을 변경 할 수 있지만 튜플은 값 자체는 변경할 수 없음.
아래에서 배울 포인트
1. 자기 자체를 재할당 한다는 것!
2. 새로운 객체를 생성한다는 것!
l, m = (10,15,20), list((10,15,20))
print()
print('ex6-1')
print(type(l),id(l))
print(type(m),id(m))
l = l * 2
m = m * 2
print('\n','ex6-2')
print(l,m,id(l),id(m))
output
ex6-1
<class 'tuple'> 1304391320640
<class 'list'> 1304391636288
ex6-2
(10, 15, 20, 10, 15, 20) [10, 15, 20, 10, 15, 20] 1304391248480 1304392494656
튜플은 값을 수정하는 할당 연산자를 지원하지 않습니다.
아래와 같은 경우는 오류를 발생시켜요.
l[0] = 3
# 결과: TypeError: 'tuple' object does not support item assignment
l *= 2
m *= 2
print()
print('\n','ex6-3')
print(l,m,id(l),id(m))
# 결과값:
# ex6-3
#(10, 15, 20, 10, 15, 20, 10, 15, 20, 10, 15, 20) [10, 15, 20, 10, 15, 20, 10, 15, 20, 10, 15, 20] 2421808451936 2421809688320