Comment imprimer l'adresse mémoire d'une variable en Python 2.7 ? Je sais que id() renvoie l'identifiant d'une variable ou d'un objet, mais il ne renvoie pas le style 0x3357e182 auquel je m'attendais pour une adresse mémoire. Je veux faire quelque chose comme print &x
où x est une variable int C++, par exemple. Comment puis-je faire cela en Python ?
Réponses
Trop de publicités?id
est la méthode que vous voulez utiliser : pour le convertir en hexagone :
hex(id(variable_here))
Par exemple :
x = 4
print hex(id(x))
Il m'a donné :
0x9cf10c
C'est ce que vous voulez, non ?
(En fait, le fait de lier deux variables à la même int
peut entraîner l'utilisation de la même adresse mémoire).
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 nombres entiers.
Il n'existe aucun moyen d'obtenir l'adresse mémoire d'une valeur dans Python 2.7 en général. En 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 ramasseur de déchets peut la déplacer s'il le souhaite).
Toutefois, si vous ne vous intéressez qu'à CPython, id
renvoie déjà l'adresse. Si le seul problème est de savoir comment formater cet entier d'une certaine manière c'est la même chose que de formater cualquier 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 de bonne raison pour cela. Si vous avez réellement besoin de l'adresse d'un objet, il est vraisemblable de la passer à ctypes
ou similaire, auquel cas vous devez utiliser ctypes.addressof
ou similaire.