본문 바로가기
Python 프로그래밍

참조 변수의 차이 사본 원본 copy reference range list

by aiyoon 2025. 6. 18.
반응형

📌 사본 전달 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() 등을 사용하세요.
  • 참조가 필요할 땐 그냥 대입하면 됩니다.

반응형