웹사이트 검색

파이썬 아이디()


Python id() 함수는 개체의 \ID\를 반환합니다. 개체의 ID는 정수이며, 수명 동안 이 개체에 대해 고유하고 일정함을 보장합니다. 수명이 겹치지 않는 두 개체는 동일한 수명을 가질 수 있습니다. id() 값 CPython 구현에서 이것은 메모리에 있는 개체의 주소입니다.

파이썬 아이디()

Python은 튜플 등과 같이 일반적으로 사용되는 데이터 유형의 id() 값을 캐시합니다. 따라서 여러 변수가 동일한 객체를 참조하고 값이 동일한 경우 동일한 id() 값을 가질 수 있습니다. 예를 들어 확인해 보겠습니다.

# integers
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

출력에서 Python이 문자열과 튜플 객체를 캐시하고 이를 사용하여 메모리 공간을 절약한다는 것이 분명합니다.

캐싱은 변경 불가능한 객체에서만 작동할 수 있습니다. 정수, 문자열, 튜플은 변경 불가능합니다. 따라서 Python 구현은 캐싱을 사용하여 메모리 공간을 절약하고 성능을 향상시킬 수 있습니다.

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

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

산출:

4519884624
4519884768

우리가 생각한 대로 dict 객체는 다른 id() 값을 반환하고 여기에는 캐싱이 없는 것 같습니다.

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

사용자 정의 개체에 대한 id() 값을 가져오는 간단한 예를 살펴보겠습니다.

class Emp:
    a = 0


e1 = Emp()
e2 = Emp()

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

산출:

4520251744
4520251856

요약

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

GitHub 리포지토리에서 전체 Python 스크립트와 더 많은 Python 예제를 확인할 수 있습니다.

참조: 공식 문서