imprimer l'adresse mémoire de la variable Python [dupliquer]

cette question a déjà une réponse ici:

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?

45
demandé sur BlackVegetable 2013-05-07 02:42:15

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.

86
répondu BlackVegetable 2017-05-23 13:18:53

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.

8
répondu abarnert 2013-05-06 23:03:02

selon le manuel , en CPython id() est l'adresse mémoire réelle de la variable. Si vous le voulez en format hex, appelez hex() dessus.

x = 5
print hex(id(x))

cela affichera l'adresse mémoire de X.

5
répondu Jonathan 2013-05-06 22:51:20