파이썬 2.7 인터프리터를 사용하고 있으며, 다음과 같은 행동에 대해 충분히 흥미로운 것을 발견했습니다. 빈 클래스 감안할 때Python에서 클래스 A가 주어지면 이후의 id (A()) 호출은 왜 동일한 값을 반환합니까?
:
class A():
pass
내가 별도의 인스턴스를 생성 할 수 있으며, 예상처럼 그들이 가지고있는 별도의 식별자 :
a = A()
b = A()
id(a)
>>> XXXXXXXX44
id(b)
>>> XXXXXXXX16
하지만이없이 아이디 내장에 대한 후속 호출을 할 때 변수가 생성되는 인스턴스를 보유하기 위해 동일한 ID가 반환되는 것을 볼 수 있습니다.
id(A())
>>> XXXXXXXX88
id(A())
>>> XXXXXXXX88
심지어 낯선 사람, 나는 id(A())
에 호출 사이에서 변수가 보유한 다른 인스턴스를 혼합 행동의 변화 :이 동작에
id(A())
>>> XXXXXXXX88
a = A()
>>> XXXXXXXX88
id(A())
>>> XXXXXXXX44
어떤 직관?
이 글을 작성한 직후에 바인딩되지 않은 즉시 인스턴스가 가비지 수집되고 용의자가 다시 사용되었다고 의심되기 시작했습니다. 그래도 누군가가 알고 있으면 철저한 설명에 감사 드리겠습니다. – brthornbury
예, 속이다. 좋은 발견. –