sourcetip

Python 변수의 인쇄 메모리 주소

fileupload 2023. 7. 17. 21:21
반응형

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))

이것은 저에게 큰 정수에 대해서도 동일한 쌍을 주었습니다.

설명서에 따르면, Cython에서.id()변수의 실제 메모리 주소입니다.만약 16진수 형식으로 원한다면, 전화하세요.hex()그 위에

x = 5
print hex(id(x))

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

일반적으로 Python 2.7에서는 값의 메모리 주소를 가져올 수 없습니다.Jython 또는 PyPy에서는 구현이 값의 주소도 알지 못합니다(또한 동일한 위치에 유지된다는 보장도 없습니다. 예를 들어, 쓰레기 수집기가 원할 경우 해당 값을 이동할 수 있습니다).

하지만 당신이 CPython에만 관심이 있다면, 는 이미 주소를 반환하고 있습니다.특정한 방식으로 정수를 포맷하는 것이 유일한 문제라면 정수를 포맷하는 것과 같습니다.

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

등등.

하지만, 이것에 대한 좋은 이유는 거의 없습니다.만약 당신이 실제로 어떤 물체의 주소가 필요하다면, 그것은 아마도 그것을 전달하는 것입니다.ctypes또는 유사한 경우, 어떤 경우를 사용해야 합니다.ctypes.addressof또는 그와 유사합니다.

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

반응형