파이썬의 다중 할당(Multiple Assignments)

개발공부를해보자·2025년 1월 10일

공부 정리

목록 보기
9/34

다중 할당은 편하다.
그런데 링크드 리스트(Linked List)에서 헷갈리는 부분이 있어 정리해본다.
x, y = 1, 2y, x = 2, 1은 같은 결과를 주지만,
node1, node1.next = node2, node2.next
node1.next, node1 = node2.next, node2는 그렇지 않다.
처음에는 너무 헷갈렸지만 이제 정리가 되었다.

핵심은,
우변은 미리 평가하여 그 값을 '임시 메모리'에 넣어 두고
좌변은 왼쪽부터 순서대로 대입하게 된다.
따라서 다중 할당 과정에서 우변은 변하지 않고 좌변은 변할 수 있다.

아래는 GPT의 도움을 받아 정리한 내용이다.

파이썬의 다중 할당 기본

# 파이썬의 다중할당 (Multiple Assignment)

# 1. 기본적인 다중할당
a, b, c = 1, 2, 3
print(a, b, c)  # 출력: 1 2 3

# 2. 값 교환 (swap)
x, y = 10, 20
x, y = y, x
print(x, y)  # 출력: 20 10

# 3. 리스트나 튜플에서 다중할당
data = [4, 5, 6]
a, b, c = data
print(a, b, c)  # 출력: 4 5 6

# 4. 별표(*)를 이용한 가변길이 할당
a, *b, c = [1, 2, 3, 4, 5]
print(a)  # 출력: 1
print(b)  # 출력: [2, 3, 4]
print(c)  # 출력: 5

# 5. 다중할당으로 동일한 값 할당
x = y = z = 0
print(x, y, z)  # 출력: 0 0 0

# 주의사항
# 1. 값과 변수의 개수는 일치해야 함
# a, b = 1  # 오류 발생: 값이 하나 부족합니다.

# 2. 가변길이 할당의 유연성
# 별표를 사용한 변수는 0개 이상의 값을 받을 수 있음
a, *b, c = [1, 2]
print(a)  # 출력: 1
print(b)  # 출력: []
print(c)  # 출력: 2

연결 리스트(Linked List)에서 다중 할당 예시

class ListNode:
    def __init__(self, value=0, next=None):
        self.value = value
        self.next = next

# 링크드 리스트 생성
node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node4 = ListNode(4)

# 연결: node1 -> node2 -> node3 -> node4
node1.next = node2
node2.next = node3
node3.next = node4

# 예제 1: node1, node1.next = node2, node2.next
node1, node1.next = node2, node2.next
# 실행 순서:
# 1. node2와 node2.next(node3)가 먼저 평가됨.
# 2. node1이 node2를 가리키게 됨.
# 3. node1.next가 node3이 됨.

# 출력 확인
print("예제 1 결과:")
print(f"node1: {node1.value}, node1.next: {node1.next.value}")  # 출력: node1: 2, node1.next: 3
print(f"node2.next: {node2.next.value}")  # 출력: node2.next: 3

# 상태 복원
node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node4 = ListNode(4)
node1.next = node2
node2.next = node3
node3.next = node4

# 예제 2: node1.next, node1 = node2.next, node2
node1.next, node1 = node2.next, node2
# 실행 순서:
# 1. node2.next(node3)와 node2가 먼저 평가됨.
# 2. node1.next가 node3으로 설정됨 (기존 node1 기준).
# 3. node1이 node2를 가리키게 됨.

# 출력 확인
print("예제 2 결과:")
print(f"node1: {node1.value}, node1.next: {node1.next.value}")  # 출력: node1: 2, node1.next: 4
print(f"node2.next: {node2.next.value}")  # 출력: node2.next: 3
profile
개발 공부하는 30대 비전공자 직장인

0개의 댓글