Python의 비밀스러운 삶: 위험한 리플렉션
Source: Dev.to
파이썬 별칭, 레퍼런스, 그리고 얕은 복사의 함정 이해하기
Timothy는 원본 master_list를 변경하지 않고 임시 손님들을 리스트에 추가해야 했습니다. 그는 리스트를 새 변수에 할당하면 복사본이 만들어진다고 생각했습니다:
# Timothy's "Safety" Plan
master_list = ["Alice", "Bob", "Carol"]
draft_list = master_list
Note: 위의 모든 방법은 얕은 복사를 생성합니다. 문자열이나 숫자와 같이 불변 객체들로 이루어진 리스트의 경우 이는 충분합니다. 리스트에 가변 객체(예: 다른 리스트, 딕셔너리)가 포함되어 있다면 내부 객체들은 여전히 공유됩니다. 이런 경우에는 깊은 복사(
copy.deepcopy)가 필요합니다.
핵심 정리
- 할당(
b = a)은 복사가 아니라 별칭을 만들 뿐입니다. - 얕은 복사를 위해서는 슬라이싱,
.copy(), 혹은list()생성자를 사용하세요. - 중첩된 가변 구조를 다룰 때 얕은 복사의 제한점을 인지하세요.
“이름은 사물 자체가 아니다. 지도는 영토가 아니다.” – Margaret
다음 에피소드: “마트료시카 함정” – 깊은 복사와 중첩 가변 객체 탐구.