본문 바로가기

Language/Python

파이썬의 변경 가능한 객체와 변경 불가능한 객체란?

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