programing

파이썬 변수의 메모리 주소 인쇄

nasanasas 2020. 11. 20. 09:03
반응형

파이썬 변수의 메모리 주소 인쇄


이 질문에 이미 답변이 있습니다.

Python 2.7에서 변수의 메모리 주소를 어떻게 인쇄합니까? id ()가 변수 또는 개체의 'id'를 반환한다는 것을 알고 있지만 이것은 메모리 주소에 대해 예상했던 0x3357e182 스타일을 반환하지 않습니다. 내가 좋아하는 뭔가를하고 싶지 print &x, 여기서 x 예를 들어 C ++ INT 변수입니다. 파이썬에서 어떻게 할 수 있습니까?


id 사용하려는 방법입니다 : 16 진수로 변환 :

hex(id(variable_here))

예를 들면 :

x = 4
print hex(id(x))

줬어:

0x9cf10c

당신이 원하는 것은 무엇입니까?

(재미있는 사실은 두 개의 변수를 동일하게 바인딩 int하면 동일한 메모리 주소가 사용될 수 있습니다.)
시도해보십시오.

x = 4
y = 4
w = 9999
v = 9999
a = 12345678
b = 12345678
print hex(id(x))
print hex(id(y))
print hex(id(w))
print hex(id(v))
print hex(id(a))
print hex(id(b))

이것은 큰 정수의 경우에도 동일한 쌍을 제공했습니다.


일반적으로 Python 2.7에서 값의 메모리 주소를 가져올 수있는 방법은 없습니다. Jython 또는 PyPy에서 구현은 값의 주소도 알지 못합니다 (예를 들어, 가비지 수집기가 원하는 경우 이동할 수 있도록 허용됨).

그러나 CPython에만 관심이 있다면 id이미 주소를 반환하고 있습니다. 유일한 문제가 특정 방식으로 해당 정수의 형식을 지정 하는 방법 인 경우 ... 정수 형식 지정과 동일 합니다.

>>> hex(33)
0x21
>>> '{:#010x}'.format(33) # 32-bit
0x00000021
>>> '{:#018x}'.format(33) # 64-bit
0x0000000000000021

… 등등.

그러나 이에 대한 타당한 이유는 거의 없습니다. 실제로 객체의 주소가 필요한 경우이를 전달 ctypes하거나 이와 유사한 경우에 사용해야합니다 ctypes.addressof.


매뉴얼 에 따르면 CPython id()에는 변수의 실제 메모리 주소가 있습니다. 16 진수 형식으로 원하면 호출 hex()하십시오.

x = 5
print hex(id(x))

이것은 x의 메모리 주소를 인쇄합니다.

참고 URL : https://stackoverflow.com/questions/16408472/print-memory-address-of-python-variable

반응형