1. 변경 가능한 객체(Mutable Object)
정의
변경 가능한 객체는 생성된 후에도 객체 내부의 값을 변경할 수 있습니다. 이러한 객체를 수정해도 동일한 메모리 주소를 유지하며, 새로운 객체를 생성하지 않습니다.
주요 특징
- 동일 객체를 참조하는 모든 변수에 영향을 미침.
- 메모리 효율적으로 사용할 수 있지만, 동시성 환경에서는 데이터 불변성을 보장하기 어렵습니다.
대표적인 Mutable 객체
- list, dict, set
예제: 리스트의 변경 가능성
# 리스트는 변경 가능한 객체
my_list = [1, 2, 3]
print(id(my_list)) # 메모리 주소 출력
my_list.append(4) # 리스트에 값 추가
print(my_list) # [1, 2, 3, 4]
print(id(my_list)) # 메모리 주소가 동일
2. 변경 불가능한 객체(Immutable Object)
정의
변경 불가능한 객체는 생성된 후 객체의 상태(값)를 변경할 수 없습니다. 객체를 수정하려는 작업은 항상 새로운 객체를 생성합니다.
주요 특징
- 데이터 불변성이 보장되므로, 동시성 환경에서 안전.
- 객체가 생성된 이후 변경할 수 없으므로, 메모리 사용이 비효율적일 수 있음.
대표적인 Immutable 객체
- int, float, str, tuple, frozenset
예제: 문자열의 변경 불가능성
# 문자열은 변경 불가능한 객체
my_str = "hello"
print(id(my_str)) # 메모리 주소 출력
my_str = my_str + " world" # 문자열 변경 -> 새로운 객체 생성
print(my_str) # "hello world"
print(id(my_str)) # 메모리 주소가 변경됨
딕셔너리의 키에는 왜 변경 불가능한 객체만 사용할 수 있을까?
딕셔너리의 동작 원리
파이썬의 딕셔너리는 해시 테이블(Hash Table)을 기반으로 작동합니다. 딕셔너리의 키는 객체의 해시 값(hash)을 사용하여 저장 위치를 결정합니다.
- 해시 값은 hash() 함수를 통해 계산되며, 키가 변경되지 않는다는 전제 하에 고정된 값이어야 합니다.
- 변경 가능한 객체는 상태가 바뀌면 해시 값이 달라질 수 있으므로, 해시 테이블의 구조가 깨지게 됩니다.
'Language > Python' 카테고리의 다른 글
[파이썬] 가비지 컬렉션 (0) | 2022.08.14 |
---|