네, Python의 딕셔너리(dictionary)는 변경 가능(mutable)한 자료형입니다. 키에 해당하는 값을 수정하더라도 새로운 딕셔너리가 생성되는 것이 아니라, 기존 딕셔너리가 그 자리에서(in-place) 업데이트됩니다.
이러한 특성 때문에 하나의 딕셔너리를 다른 변수에 할당하면 두 변수는 메모리상의 동일한 객체를 참조하게 됩니다. 따라서 한쪽 변수에서 값을 변경하면 다른 쪽 변수에도 그 변경이 그대로 반영됩니다.
예제
a = {'foo': 1, 'bar': 12}
b = a
b['foo'] = 20
print(a)
print(b)출력 결과
{'foo': 20, 'bar': 12}
{'foo': 20, 'bar': 12}위 실행 결과를 보면 변수 b의 값만 변경했음에도 불구하고 변수 a의 내용 역시 함께 변경된 것을 확인할 수 있습니다. 이는 a와 b가 서로 다른 두 개의 딕셔너리가 아니라, 같은 딕셔너리 객체를 가리키고 있기 때문입니다.
원본을 유지하고 싶다면? copy() 활용하기
만약 원본 딕셔너리를 그대로 보존한 상태에서 복사본을 수정하고 싶다면, 단순히 변수를 할당하는 대신 copy() 메서드를 사용해야 합니다.
a = {'foo': 1, 'bar': 12}
b = a.copy()
b['foo'] = 20
print(a)
print(b)출력 결과
{'foo': 1, 'bar': 12}
{'foo': 20, 'bar': 12}이처럼 copy()를 사용하면 독립적인 새로운 딕셔너리가 생성되므로, 복사본을 수정해도 원본에는 영향을 주지 않습니다. 중첩된 딕셔너리까지 완전히 복제해야 하는 경우에는 copy 모듈의 deepcopy() 함수를 사용하는 것이 좋습니다.