imprimer l'adresse mémoire de la variable Python [dupliquer]
cette question a déjà une réponse ici:
- Accès À L'Adresse Mémoire De L'Objet 8 réponses
comment imprimer l'adresse mémoire d'une variable en Python 2.7?
I know id () renvoie l'id d'une variable ou d'un objet, mais pas le style 0x3357e182 que j'attendais. s'attendant à voir une adresse de mémoire.
Je veux faire quelque chose comme print &x
, où x est une variable int C++ par exemple.
Comment puis-je faire ça en Python?
3 réponses
id
est la méthode que vous souhaitez utiliser: pour le convertir en hexadécimal:
hex(id(variable_here))
par exemple:
x = 4
print hex(id(x))
M'a donné:
0x9cf10c
C'est ce que tu veux, Non?
(Fun fact, liant deux variables à la même int
peut conduire à la même adresse mémoire être utilisé.)
Essayez:
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))
Cela m'a donné des paires identiques, même pour les grands entiers.
Il n'y a aucun moyen d'obtenir l'adresse mémoire d'une valeur dans Python 2.7 en général. Dans Jython ou PyPy, l'implémentation ne connaît même pas l'adresse de votre valeur (et il n'y a même pas de garantie qu'elle restera au même endroit-par exemple, le collecteur d'ordures est autorisé à la déplacer s'il le veut).
cependant, si vous ne vous souciez que de CPython, id
il me renvoie déjà l'adresse. Si le seul problème est de savoir comment format entier d'une certaine façon... c'est la même chose que le formatage n'importe quel entier:
>>> hex(33)
0x21
>>> '{:#010x}'.format(33) # 32-bit
0x00000021
>>> '{:#018x}'.format(33) # 64-bit
0x0000000000000021
... et ainsi de suite.
cependant, il n'y a presque jamais une bonne raison pour cela. Si vous avez réellement besoin de l'adresse d'un objet, c'est sans doute pour passer à ctypes
ou similaire, auquel cas vous devez utiliser ctypes.addressof
ou similaire.