Come si stampa l'indirizzo di memoria di una variabile in Python 2.7? So id() restituisce l''id' di una variabile o oggetto, ma questo non restituisce lo stile 0x3357e182 che mi aspettavo di vedere per un indirizzo di memoria. Voglio fare qualcosa come print &x
, dove x è una variabile int C++ per esempio. Come posso farlo in Python?indirizzo di memoria di stampa della variabile Python
risposta
id
è il metodo che si desidera utilizzare: per convertirlo in esadecimale:
hex(id(variable_here))
Per esempio:
x = 4
print hex(id(x))
Mi ha dato:
0x9cf10c
Quale è quello che vuoi, vero?
(Una curiosità, vincolante due variabili allo stesso int
può comportare lo stesso indirizzo di memoria in uso.)
Prova:
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))
questo mi ha dato coppie identiche, anche per le grandi numeri interi.
Penso che questo sia specifico per CPython. C'è anche 'addressof' da [ctype] (http://docs.python.org/2/library/ctypes.html#ctypes.addressof) – nvlass
Questo vale solo per i' int's piccoli, credo. – Daenyth
Scopriamolo @Daenyth! – BlackVegetable
In base a the manual, in CPython id()
è l'indirizzo di memoria effettivo della variabile. Se lo vuoi in formato esadecimale, chiama lo hex()
su di esso.
x = 5
print hex(id(x))
questo stamperà l'indirizzo di memoria di x.
Non c'è modo di ottenere l'indirizzo di memoria di un valore in Python 2.7 in generale. In Jython o PyPy, l'implementazione non conosce nemmeno l'indirizzo del tuo valore (e non c'è nemmeno la garanzia che rimanga nello stesso luogo, ad es. Il garbage collector può spostarlo se lo desidera).
Tuttavia, se si interessa solo di CPython, sta già restituendo l'indirizzo. Se l'unico problema è come formattare che integer in un certo modo ... è la stessa di formattazione qualsiasi intero:
>>> hex(33)
0x21
>>> '{:#010x}'.format(33) # 32-bit
0x00000021
>>> '{:#018x}'.format(33) # 64-bit
0x0000000000000021
... e così via.
Tuttavia, non c'è quasi mai una buona ragione per questo. Se è effettivamente necessario l'indirizzo di un oggetto, è presumibile passarlo a ctypes
o simile, nel qual caso è necessario utilizzare ctypes.addressof
o simile.
Questa è la risposta più accurata! Sia per questo post che per il "duplicato" (http://stackoverflow.com/questions/121396/accessing-object-memory-address) – DilithiumMatrix
- 1. Indirizzo di stampa della funzione membro virtuale
- 2. Indirizzo della variabile per-cpu
- 3. Posso ottenere un oggetto Python dal suo indirizzo di memoria?
- 4. lldb: Stampa dell'indirizzo di una variabile
- 5. nome di stampa della variabile in C#
- 6. Indirizzo della memoria del blocco iniziale
- 7. byte di stampa dalla memoria in C
- 8. Dov'è l'allocazione di memoria della variabile "__this_module"?
- 9. indirizzo C di un indirizzo di una variabile
- 10. stampa il valore di una variabile in Python/Django?
- 11. variabile di stampa e una stringa in python
- 12. Python: stampa il nome e il valore di una variabile?
- 13. stringa di stampa java variabile
- 14. Indirizzo memoria di accesso in C#
- 15. Indirizzo di memoria delle variabili in Java
- 16. Risultato di stampa della query mysql dalla variabile
- 17. Come printf un indirizzo di memoria in C
- 18. python: stampa in orizzontale invece della stampa predefinita corrente
- 19. Python utilizzo della memoria multiprocessing
- 20. nome variabile di stampa in un #define
- 21. Un puntatore ha anche un indirizzo o un'allocazione di memoria?
- 22. Perdite di memoria Python
- 23. Comando di reindirizzamento della stampa in script python tramite tqdm.write()
- 24. Argomenti della funzione di stampa in sys.settrace in python
- 25. Indirizzo univoco per variabile constexpr
- 26. C++ - Restituisce il valore di un particolare indirizzo di memoria
- 27. prolog - stampa il valore di una variabile
- 28. Stampa di una variabile void * in C
- 29. Stampa del valore di una variabile XSL
- 30. get_dummies errore di memoria python
Si noti che 'id' non è affatto un puntatore in PyPy o Jython (non si sa su IronPython); questa è una cosa specifica per CPython. Ancora più importante ... perché vuoi l'indirizzo? Ogni caso d'uso realistico probabilmente coinvolgerà 'ctype', nel qual caso si desidera utilizzare' ctypes' per ottenere l'indirizzo in un formato che si può passare al codice C, non 'id'. – abarnert