파이썬 id()

파이썬의 id() 함수는 객체의 “식별자”를 반환합니다. 객체의 식별자는 객체의 수명 동안 고유하고 변하지 않는 정수입니다. 수명이 겹치지 않는 두 객체는 동일한 id() 값을 가질 수 있습니다. CPython 구현에서는 이것이 객체의 메모리 주소입니다. 파이썬은

Python id()

자주 사용되는 데이터 유형의 id() 값을 캐시합니다. 이러한 데이터 유형에는 문자열, 정수, 튜플 등이 있습니다. 따라서 값이 같다면 여러 변수가 동일한 객체를 참조하고 동일한 id() 값을 가질 수 있습니다. 예를 통해 이를 확인해 보겠습니다.

# 정수
a = 10
b = 10
c = 11
d = 12

print(id(a))
print(id(b))
print(id(c))
print(id(d))

결과:

4317900064
4317900064
4317900096
4317900128

‘a’와 ‘b’의 id() 값이 동일하며, 동일한 정수 값을 갖습니다. 문자열과 튜플도 비슷한 동작을 얻을 수 있는지 확인해 봅시다.

# tuples
t = ('A', 'B')
print(id(t))

t1 = ('A', 'B')
print(id(t1))

# strings
s1 = 'ABC'
s2 = 'ABC'
print(id(s1))
print(id(s2))

결과:

4320130056
4320130056
4320080816
4320080816

결과에서 보듯이 파이썬은 문자열과 튜플 객체를 캐시하고 메모리 공간을 절약하기 위해 사용합니다.

캐싱은 불변 객체만 사용할 수 있으며, 정수, 문자열, 튜플은 불변입니다. 따라서 파이썬 구현은 메모리 공간을 절약하고 성능을 향상시키기 위해 캐싱을 사용할 수 있습니다.

우리는 사전이 불변이 아닌 것을 알고 있습니다. 동일한 요소를 가지고 있더라도 서로 다른 사전에 대해 id()가 다른지 확인해 봅시다.

# dict
d1 = {"A": 1, "B": 2}
d2 = {"A": 1, "B": 2}
print(id(d1))
print(id(d2))

출력:

4519884624
4519884768

우리가 예상했듯이, 사전 객체는 다른 id() 값이 반환되며 여기에는 캐싱이 없어 보입니다.

사용자 정의 객체에 대한 Python id()

사용자 정의 객체에 대한 id() 값을 얻는 간단한 예제를 살펴보겠습니다.

class Emp:
    a = 0


e1 = Emp()
e2 = Emp()

print(id(e1))
print(id(e2))

출력:

4520251744
4520251856

요약

Python id() 값은 객체에 대해 고유하고 일정함이 보장됩니다. 이를 사용하여 두 객체가 메모리에서 동일한 객체를 참조하는지 여부를 확인할 수 있습니다.

전체 Python 스크립트 및 더 많은 Python 예제는 우리의 GitHub 저장소에서 확인할 수 있습니다.

참고: 공식 문서

Source:
https://www.digitalocean.com/community/tutorials/python-id