더북(TheBook)

하지만 언패킹 구문을 사용하면 한 줄로 두 인덱스가 가리키는 원소를 서로 맞바꿀 수 있다.

def bubble_sort(a):
    for _ in range(len(a)):
        for i in range(1, len(a)):
            if a[i] < a[i-1]:
                a[i-1], a[i] = a[i], a[i-1] # 맞바꾸기

names = ['프레즐', '당근', '쑥갓', '베이컨']
bubble_sort(names)
print(names)

>>>
['당근', '베이컨', '쑥갓', '프레즐']

어떻게 이런 맞바꾸기가 가능한지 살펴보자. 우선 대입문의 우항(a[i], a[i-1])이 계산되고, 그 결괏값이 이름이 없는 새로운 tuple(위 루프가 맨 처음 반복될 때라면 ('carrots', 'pretzels')와 같음)에 저장된다. 그 후 대입문의 좌항에 있는 언패킹 패턴(a[i-1], a[i])을 통해 임시 tuple에 있는 값이 a[i-1]a[i]라는 변수에 각각 저장된다. 따라서 0번 인덱스의 'pretzels''carrots'로 바뀌고, 1번 인덱스의 'carrots''pretzels'로 바뀐다. 마지막으로 이름이 없는 임시 tuple이 조용히 사라진다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.