2017-01-12 13 views
2

파이썬 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 

어떤 직관?

+1

이 글을 작성한 직후에 바인딩되지 않은 즉시 인스턴스가 가비지 수집되고 용의자가 다시 사용되었다고 의심되기 시작했습니다. 그래도 누군가가 알고 있으면 철저한 설명에 감사 드리겠습니다. – brthornbury

+1

예, 속이다. 좋은 발견. –

답변

4

id(A())A 인스턴스를 만듭니다.이 인스턴스는 id 메서드가 종료 된 직후 가비지 수집됩니다.

따라서 id(A())을 새로 호출하면 참조가 다시 사용됩니다.

변수에 첫 번째 참조를 저장하면 Python은 참조가 다시 사용되므로 사용할 수 없습니다.

+0

빠른 답변 주셔서 감사합니다. – brthornbury

+0

당신은 자신이 대답을 알아 냈습니다. –

+0

잘 모르겠다. 알고있는 것이 더 좋다. – brthornbury