Python컬렉션과 문자열

가변 객체와 복사

리스트와 딕셔너리 같은 가변 객체가 참조로 공유될 때 생기는 변화와 얕은 복사의 기본 규칙을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

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

주의할 점

"대입했으니 새 리스트가 생겼겠지"라고 생각하면 버그가 생기기 쉽습니다. 특히 함수 인자, 기본값, 중첩 리스트에서 참조 공유를 자주 놓칩니다.