Python 객체 값 이해: 가변성과 불변성 비교

파이썬 객체의 값 이해: 가변성과 불변성

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

초보 프로그래머 및 중급 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__ 메서드 정의로 타입별 값 비교 방식 커스터마이징 가능