>백엔드 개발 >파이썬 튜토리얼 >여러 Python 개체가 때때로 동일한 ID를 공유하는 이유는 무엇입니까?

여러 Python 개체가 때때로 동일한 ID를 공유하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-21 20:12:39322검색

Why Do Multiple Python Objects Sometimes Share the Same ID?

여러 개체에 대한 동일한 ID: Python의 기발한 동작

Python에서 이름을 할당하지 않고 여러 개체를 생성하면 실제로 개체를 공유하게 될 수 있습니다. 같은 아이디. 이 명백한 역설은 객체의 ID가 해당 수명 내에서만 고유하다는 사실에서 비롯됩니다.

someClass()와 같이 객체를 참조하는 변수를 생성하면 객체의 수명은 변수가 범위를 벗어나면 할당되고 종료됩니다. 제공한 예에서는 다음을 제공합니다.

print(someClass())
print(someClass())

두 개의 someClass() 호출로 인해 두 개의 개체가 생성되지만 둘 다 동일한 인쇄 호출 내에서 생성되고 삭제됩니다. 따라서 동일한 수명을 공유하고 동일한 ID를 가질 수 있습니다.

이 동작은 Python 3.3.3의 가비지 수집을 위한 참조 계산 사용에서 더욱 두드러집니다. 객체의 참조 횟수가 0에 도달하면(즉, 어떤 변수도 이를 참조하지 않음) 삭제 대상이 됩니다. 이 예에서 someClass()에 대한 두 번째 호출로 인해 첫 번째 개체의 참조 횟수가 0이 되어 즉시 할당 해제가 가능해집니다.

할당될 다음 개체가 동일한 메모리 위치에 배치되므로 첫 번째 객체로서 동일한 ID로 끝납니다. 이는 동일한 클래스를 연속적으로 여러 번 호출하면 동일한 ID를 가진 객체가 생성될 수 있는 이유를 설명합니다.

객체에 고유한 ID가 필요한 경우 명시적으로 해당 객체를 변수에 할당하고 유지함으로써 이러한 동작을 극복할 수 있습니다. :

a = someClass()
b = someClass()
print(id(a))
print(id(b))

여기서 a와 b는 같은 클래스에 속하더라도 서로 다른 ID를 갖는 별도의 개체를 나타냅니다. 또는 고유한 클래스별 ID 메커니즘을 구현하여 고유성을 보장할 수 있습니다.

위 내용은 여러 Python 개체가 때때로 동일한 ID를 공유하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.