파이썬 객체 식별성: 객체의 고유 식별자 이해
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 초급~중급 파이썬 개발자
- 객체 식별성, 메모리 관리, 불변/가변 객체 차이를 이해하고자 하는 개발자
- 값과 식별자 구분이 필요한 실무 시나리오 개발자
핵심 요약
- 객체의 식별자(
id()
)는 메모리 주소를 기반으로 고유하게 생성되며, 객체가 존재하는 동안 변하지 않는다 is
연산자는 식별자 비교에 사용되며,==
는 값의 동등성 비교에 사용된다- 불변 객체(예: 정수)는 동일한 값이면 식별자가 재사용될 수 있으나, 가변 객체(예: 리스트)는 식별자가 다르게 생성된다
섹션별 세부 요약
1. 객체 식별성의 기초
- 모든 파이썬 객체는 고유한 식별자가 존재하며,
id()
함수로 확인 가능 is
연산자를 통해 두 객체가 동일한 식별자(메모리 주소)를 가지는지 검사 가능- 예:
a = [1, 2, 3]
,b = a
→a is b
는True
,id(a) == id(b)
도 동일한 값
2. 식별성의 역사적 배경
- 1945년: 바이네umann 아키텍처에서 메모리 주소 기반의 식별 개념 도입
- 1972년: C 언어의 포인터로 식별성의 유용성 증명
- 1991년: Python 0.9.0에서
is
연산자로 식별자 비교 기능 추가 - 2000년: Python 2.0에서
id()
함수의 안정성 보장
3. 식별성의 실무 적용 사례
- 동일한 값 vs 동일한 객체 구분:
```python
cup1 = [1, 2]
cup2 = [1, 2]
print(cup1 == cup2) # True (값 동등)
print(cup1 is cup2) # False (다른 식별자)
```
- 공유 상태 추적:
```python
form1 = {"name": "Ada"}
form2 = form1
form2["name"] = "Alan"
print(form1["name"]) # "Alan" (동일한 식별자로 변경 반영)
```
- 불변 객체의 재사용:
```python
a = 1
b = 1
print(a is b) # Often True (Python의 최적화로 인한 재사용)
```
4. 식별성 관리 팁
- 복사로 공유 상태 회피:
```python
a = [1, 2, 3]
b = a.copy()
a[0] = 99
print(b[0]) # 1 (복사로 다른 식별자 생성)
```
is
와==
의 목적 차이:
- is
: 객체의 식별자(메모리 주소) 비교
- ==
: 값의 동등성 비교
결론
is
연산자는 식별자 비교,==
는 값 비교에 사용- 가변 객체는 값이 같아도 식별자가 다를 수 있으므로,
copy()
로 복사하여 공유 상태 회피 - 불변 객체는 동일한 값이면 식별자가 재사용될 수 있으나, 이는 Python의 구현에 따라 달라질 수 있음