Python 프로그래밍
참조 변수의 차이 사본 원본 copy reference range list
aiyoon
2025. 6. 18. 15:14
반응형
📌 사본 전달 vs 원본 전달 (참조 변수의 차이)
🎁 비유로 이해하기
개념 | 설명 | 비유 |
사본(copy) | 기존 리스트와 똑같지만 완전히 새로운 리스트를 만듦 | 프린터로 문서를 복사해서 새 종이로 만드는 것 |
참조(reference) | 기존 리스트를 가리키는 또 다른 변수 | 책상 위의 같은 책을 두 사람이 함께 보는 것 |
🧪 코드와 함께 보기
numbers = list(range(11)) # [0, 1, 2, ..., 10]
✅ 1. 슬라이싱을 통한 사본 생성
reversed_list = numbers[::-1] # ← 새 리스트가 만들어짐
reversed_list[0] = 99
- reversed_list는 numbers의 복사본
- reversed_list[0]만 바뀌고, numbers는 변하지 않음
📌 사본이므로 원본과는 완전히 별개
❌ 2. 단순 대입은 참조 공유
numbers2 = numbers
numbers2[0] = 11
- numbers2는 numbers와 같은 리스트를 함께 가리킴
- numbers2[0] = 11 하면 → numbers[0]도 바뀜
📌 같은 책을 두 개의 변수명이 함께 보고 있는 것
🔍 차이를 그림으로 이해하기
✅ 사본일 때
numbers → [ 0, 1, 2, 3, ..., 10 ]
reversed_list → [10, 9, 8, ..., 0 ] (별도의 리스트)
❌ 참조일 때
numbers ↘
→ [ 11, 1, 2, 3, ..., 10 ]
numbers2 ↗ (같은 리스트를 가리킴)
✅ 핵심 정리
비교 항목 | 사본(copy) | 참조(reference) |
생성 방식 | [:], [::-1], copy() | 단순 대입 a = b |
연결 관계 | 완전히 다른 리스트 | 같은 리스트 가리킴 |
원본 영향 | 없음 | 서로 영향 줌 |
예시 | reversed_list = numbers[::-1] | numbers2 = numbers |
🧠 Tip
- 사본을 만들고 싶으면 반드시 슬라이싱, .copy(), list() 등을 사용하세요.
- 참조가 필요할 땐 그냥 대입하면 됩니다.
반응형