-
id VS data_ptr()언어/파이썬 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가 되어서 같은 주소값을 갖지만 다른 객체이기 때문에 가능하다.
'언어 > 파이썬' 카테고리의 다른 글
정적메소드와 클래스메소드 (0) 2021.01.09 unsqueeze에 대한 빠른 이해 (0) 2021.01.01 numpy [...] (0) 2021.01.01 in 연산자 (0) 2020.12.29 전역변수 global (0) 2020.12.29