Saltar al contenido

imprimir la dirección de memoria de la variable de Python

Jorge, miembro de este gran staff, nos ha hecho el favor de escribir este escrito ya que controla perfectamente este tema.

Solución:

id es el método que desea utilizar: para convertirlo a hexadecimal:

hex(id(variable_here))

Por ejemplo:

x = 4
print hex(id(x))

Me dio:

0x9cf10c

¿Qué es lo que quieres, verdad?

(Dato curioso, unir dos variables al mismo int puede resultar en el uso de la misma dirección de memoria.)
Probar:

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

Esto me dio pares idénticos, incluso para los números enteros grandes.

Según el manual, en CPython id() es la dirección de memoria real de la variable. Si lo quiere en formato hexadecimal, llame hex() en eso.

x = 5
print hex(id(x))

esto imprimirá la dirección de memoria de x.

No hay forma de obtener la dirección de memoria de un valor en Python 2.7 en general. En Jython o PyPy, la implementación ni siquiera conoce la dirección de su valor (y ni siquiera hay una garantía de que permanecerá en el mismo lugar; por ejemplo, el recolector de basura puede moverlo si quiere).

Sin embargo, si solo te importa CPython, id ya está devolviendo la dirección. Si el único problema es cómo formatear ese entero de cierta manera… es lo mismo que formatear ningún entero:

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

… y así.

Sin embargo, casi nunca hay una buena razón para esto. Si realmente necesita la dirección de un objeto, presumiblemente es para pasárselo a ctypes o similar, en cuyo caso debe utilizar ctypes.addressof o similar.

valoraciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *