[처음 시작하는 파이썬] ch7. 튜플

2023. 1. 24. 12:35파이썬/[처음 시작하는 파이썬] 개념

컴퓨터 언어는 대부분 첫 번째, 두 번째... 그리고 마지막 항목의 정수 위치로 시퀀스의 항목을 나타냅니다.

처음 배운 시퀀스는 문자열이었습니다. 문자열은 문자의 시퀀스라고 했습니다.

 

파이썬은 두 가지 다른 시퀀스 구조가 있습니다.

바로 튜플과 리스트입니다.

문자열과 달리, 이들 항목은 다른 타입이 될 수 있습니다.

다시 말해, 각 요소가 어떤 객체도 될 수 있다는 것인데, 이것은 프로그래머가 원하는 대로

깊고 복잡한 구조를 만드는 것을 가능하게 해줍니다.

 

튜플은 불변입니다. 튜플에 항목을 할당하고 난 뒤 바꿀 수 없습니다.

리스트는 가변입니다. 항목을 할당하고 난 뒤 자유롭게 수정하거나 삭제할 수 있습니다.

 

그래서 리스트를 이용해 다룰 수 있는 기능은 튜플에 비해 훨씬 많습니다.

 

7.1 튜플

7.1.1 튜플 생성하기: , 그리고 ( )

튜플은 다양한 방법으로 생성할 수 있습니다.

비일관적이라고 말할 정도입니다.

 

가장 중요한 건

, 컴마!

 

1. ( ) 사용해서 빈 튜플 만들기

empty_tuple = ()
print(type(empty_tuple), empty_tuple)
<class 'tuple'> ()

 

2. 한 요소 이상의 튜플을 만들기 위해서는 각 요소 뒤에 콤마(,)를 붙입니다.

one_marx = 'Groucho',
print(one_marx)
('Groucho',)

 

3. 생성 시 괄호추가 가능합니다.

one_marx = ('Groucho',)
print(one_marx)
('Groucho',)

이 괄호가 튜플을 정의하는데 영향을 주는 건 아닙니다.

이미 , 콤마를 찍은 것에서 튜플이 되었으니까요.

그렇지만 어차피 괄호를 포함해서 출력이 될 것인데,

입력부터 저렇게 해주면 직관적으로 튜플임을 바로 알기 편합니다.

 

* 주의: 콤마를 다른 용도로 사용하려면 괄호가 필요합니다. (함수, 메서드의 인수 등)

때로는 괄호를 꼭 써주는 것이 중요합니다. => 이럴거면 평소에 튜플이면 그냥 괄호 추가해서 나타내줍시다.

print(type('Groucho',))
print(type(('Groucho',)))
<class 'str'>
<class 'tuple'>

다른 용도로 사용할 때 괄호를 안쓰면 문자열로 인식해버립니다.

 

* 주의: 괄호 안에 한 요소만 있고 콤마(,)를 생략하면, 튜플이 아니라 문자열이 됩니다. 콤마가 중요합니다!

one_marx = ('Groucho')
print(type(one_marx), one_marx)
<class 'str'> Groucho

 

4. 튜플 언패킹** 튜플로 한 번에 여러 변수를 할당하는 것이 가능합니다. 

marx_tuple = ('Groucho','Chico', 'Harpo')

a, b, c = marx_tuple
print(a)
print(b)
print(c)
Groucho
Chico
Harpo

 

단,

marx_tuple = a, b, c

이렇게 해주면 안됩니다.. 당연하죠

a, b, c라는 변수에 marx_tuple 요소들을 할당해주는 거니까요.

순서 주의 합시다.

 

5. 값을 교환하기 위해 임시변수 사용 없이 튜플을 사용하는 것이 가능합니다. 

password = '486'
icecream = 'berry'
password, icecream = icecream, password
print(password)
print(icecream)
berry
486

 

7.1.2 생성하기:  tuple( )

tuple()함수은 다른 객체를 튜플로 만들어줍니다.

 

marx_list = ['Groucho','Chico', 'Harpo']
print(tuple(marx_list))
('Groucho', 'Chico', 'Harpo')

 

7.1.3 결합하기:  +

print(('Groucho',) + ('Chico', 'Harpo'))
('Groucho', 'Chico', 'Harpo')

 

7.1.4 항목 복제하기:  *

print(('Groucho',) * 4)
('Groucho', 'Groucho', 'Groucho', 'Groucho')

 

7.1.5 비교하기

a = (7, 2)
b = (7, 2, 9)
print(a == b)
print(a < b)
False
True

 

7.1.6 순회하기: for와 in

words = ('fresh', 'out', 'of', 'ideas')
for word in words:
    print(word)
fresh
out
of
ideas

 

7.1.7 수정하기

튜플은 문자열처럼 불변 객체이므로 기존 튜플을 변경할 수 없습니다.

문자열과 같이 튜플을 결합하여 새 튜플을 만들 수 있습니다.

t1 = ('Fee', 'Fie', 'Flop')
t2 = ('Flop',)
print(t1 + t2)
('Fee', 'Fie', 'Flop', 'Flop')

 

이것은 마치 튜플을 수정하는 것처럼 보입니다.

 

t1 = ('Fee', 'Fie', 'Flop')
t2 = ('Flop',)
t1 = t1 + t2
print(t1)
('Fee', 'Fie', 'Flop', 'Flop')

 

그러나 이것은 이전의 t1이 아닙니다.새로운 튜플을 t1에 할당한 것일 뿐입니다.

 

t1 = ('Fee', 'Fie', 'Flop')
print(id(t1))
t2 = ('Flop',)
t1 = t1 + t2
print(t1)
print(id(t1))
1551045933760
('Fee', 'Fie', 'Flop', 'Flop')
1551045868048

id가 다름을 확인 가능합니다.