기본 패턴
python
numbers = [1, 2, 3]
alias = numbers
copied = numbers.copy()
numbers.append(4)설명
- Python 변수는 값 자체보다 객체를 가리키는 이름이라고 이해하는 편이 좋습니다.
- 리스트, 딕셔너리, 집합 같은 가변 객체는 여러 변수가 같은 객체를 함께 참조할 수 있습니다.
- 그래서 단순 대입은 복사가 아니라 "같은 객체를 함께 가리키기"가 됩니다.
.copy()나 슬라이싱은 보통 얕은 복사이며, 내부에 중첩된 객체까지 완전히 분리하지는 않습니다.
짧은 예제
python
items = [[1], [2]]
shallow = items.copy()
items[0].append(99)
print(items) # [[1, 99], [2]]
print(shallow) # [[1, 99], [2]]빠른 정리
| 표현 | 결과 |
|---|---|
b = a | 같은 객체를 함께 참조 |
a.copy() | 얕은 복사 |
a[:] | 시퀀스 얕은 복사 |
| 중첩 구조 | 내부 객체는 여전히 공유될 수 있음 |
공식 참고: Data Structures
주의할 점
"대입했으니 새 리스트가 생겼겠지"라고 생각하면 버그가 생기기 쉽습니다. 특히 함수 인자, 기본값, 중첩 리스트에서 참조 공유를 자주 놓칩니다.