Python의 객체 ID: 이름이 없는 여러 객체가 동일한 ID를 공유하는 이유
Python에서 특정 클래스의 객체를 여러 개 생성할 때 다음과 같은 경우가 발생할 수 있습니다. 각 인스턴스는 고유한 ID(ID)를 보유할 것으로 예상됩니다. 그러나 특정 상황에서는 이름이 지정되지 않은 객체를 연속적으로 생성하면 동일한 ID를 갖게 될 수 있습니다.
객체 수명 및 ID 이해
객체의 ID는 객체의 객체를 나타냅니다. 메모리의 고유한 위치. 그러나 이 ID는 프로그램 실행 전체가 아닌 개체의 수명 동안에만 고유함을 보장합니다.
제공된 예에서는 print:
print(someClass()) print(someClass())
CPython 구현 세부 정보
Python의 가비지 수집은 참조 계산을 통해 발생합니다. 또한 개체의 ID는 해당 메모리 위치와 관련이 있습니다. 이름이 지정되지 않은 첫 번째 개체가 할당 해제되면 해당 개체가 차지했던 메모리 위치를 사용할 수 있게 됩니다.결과적으로 생성된 다음 개체는 동일한 메모리 위치에 배치되어 두 개체에 동일한 ID가 할당됩니다.
해결책
객체에 대해 고유한 ID를 보장하려면 객체에 대한 참조를 목록에 유지하거나 다음과 같이 적절한 보장을 제공하는 클래스별 ID를 구현합니다.class SomeClass: next_id = 0 def __init__(self): self.id = SomeClass.nextid SomeClass.nextid += 1
위 내용은 이름이 지정되지 않은 여러 Python 개체가 때때로 동일한 ID를 공유하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!