언어/파이썬

id VS data_ptr()

AlgoPoolJa 2021. 1. 1. 18:44

아이디 연산자(Identity Operators)

is : 양쪽 Operand가 동일한 Object를 가리키는지 아닌지를 검사합니다.
is not : 양쪽 Operand가 다른 Object를 가리키는지 아닌지를 검사합니다.

  • 동일한 객체 여부를 판별하는 연산자이다. 
  • id() 함수는 객체를 입력값으로 받아서 객체의 고유값(레퍼런스)을 반환하는 함수입니다.
  • id는 동일한 객체인지 판별하기 위해서 사용하는 함수 이다. 

메모리 주소 연산자(Identity Operators)

변수.data_ptr()

  • 메모리 주소값을 확인하는 함수이다.
  • 결과값으로 메모리 주소가 나온다.

 

그렇다면 여기서 질문 두 변수 a와 b의 data_ptr()의 값이 같은데 id값이 다를 수 있을까?

=> 있다. 예를들어 a = torch.tennsor(np.arange(12).reshape(3,4) , dtype =torch.float64) 이고 이때 a를 ta=a.T 로 하면 id(a) == id(ta)#False 

a.data_ptr() == ta.data_ptr() #true 가 나온다.

이유 Transpose는 주소를 바꾸지 않고 바로 그 주소에서 메타데이터를 바꾸기 때문에 a[0]과 a[1] 의 차이가 32byte 가 되는 반면 ta[0] 과 ta[1]의 차이가 8byte가 되어서 같은 주소값을 갖지만 다른 객체이기 때문에 가능하다.