파이썬 객체의 값 이해: 가변성과 불변성
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
초보 프로그래머 및 중급 Python 개발자.
난이도: 기초 개념 설명 중심, 코드 예시 포함으로 이해 용이
핵심 요약
- 객체의 값(value)은 계산, 비교, 출력 시 객체가 보유하는 데이터로,
==
연산자로 비교 가능 - 가변 객체(mutable)는 값이 변경 가능하고, 불변 객체(immutable)는 생성 후 값 변경 불가능
is
연산자는 객체의 식별자(identity)(메모리 주소) 비교,__eq__
메서드로 값 비교 방식 정의
섹션별 세부 요약
1. 객체의 값과 식별자 이해
- 객체의 값(value)은 내용, 식별자(identity)는 메모리 주소
a == b
는 값 비교,a is b
는 식별자 비교__eq__
메서드로 각 타입의 값 비교 기준 정의
2. 값의 역사적 발전
- 1960년 ALGOL: 변수 이름으로 값 저장
- 1972년 C:
==
로 값 비교, 포인터로 주소 비교 - 1980년 ABC: 불변 타입(문자열, 숫자) 도입
- 1991년 Python 0.9.0:
==
과is
분리 - 2008년 Python 3.0: 유니코드 문자열 지원
3. 값이 실제 문제 해결에 어떻게 도움 되는가
- 문제: 동일한 선물이 담긴 두 상자 비교 →
==
사용 (값 비교)
```python
gift1 = [1, 2, 3]
gift2 = [1, 2, 3]
print(gift1 == gift2) # True
```
- 문제: 노트북의 글 변경 → 가변 객체 사용
```python
notebook = ["first", "second"]
notebook[0] = "new"
print(notebook) # ['new', 'second']
```
- 문제: 조각에 새 이름 새기기 → 불변 객체 사용
```python
name = "Ada"
new_name = name.upper()
print(name) # "Ada"
print(new_name) # "ADA"
```
결론
==
연산자로 값 비교,is
로 식별자 비교 → 메모리 관리 및 객체 동일성 판단 시 유용- 가변 객체는
list
,dict
,set
등이며, 불변 객체는str
,int
,tuple
등 __eq__
메서드 정의로 타입별 값 비교 방식 커스터마이징 가능