하지만 언패킹 구문을 사용하면 한 줄로 두 인덱스가 가리키는 원소를 서로 맞바꿀 수 있다.
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이 조용히 사라진다.