paso - Acceder a la dirección de memoria en python
paso de parametros python (4)
"Quiero leer el contenido de la memoria apuntada por ptr"
Escriba el código en C. Use el código de Python. http://docs.python.org/extending/extending.html
Mi pregunta es: ¿cómo puedo leer el contenido de una dirección de memoria en python? ejemplo: ptr = id (7) Quiero leer el contenido de la memoria apuntada por ptr. Gracias.
¿Estás tratando de "revertir" la id
para obtener el objeto de Python del resultado de id(thing)
? Ni siquiera sé si se puede hacer eso, y definitivamente no se debe hacer; derrotaría la recolección de basura y conduciría a una falta de seguridad en la memoria. Si su programa hace eso, significa que efectivamente tiene referencias a cosas (los números de id
) que el recolector de basura no sabe que son referencias, por lo que podría liberar objetos que todavía está usando (dependiendo de lo que ocurra en el resto del programa) )
Si está tratando de leer la memoria bruta de un puntero que ha obtenido a partir de una extensión C o algo así, entonces las otras respuestas pueden ayudarlo.
Eche un vistazo a ctypes.string_at . Aquí hay un ejemplo. Vacia la estructura de datos en bruto de un entero de Python 3. Espero que solo hagas esto como ejercicio. No hay razón para hacer esto con Python puro.
from ctypes import string_at
from sys import getsizeof
from binascii import hexlify
a = 0x7fff
print(hexlify(string_at(id(a), getsizeof(a))))
Salida
b''02000000d8191e1e01000000ff7f''
En Python, generalmente no se usan punteros para acceder a la memoria a menos que esté interactuando con una aplicación C. Si eso es lo que necesita, eche un vistazo al módulo ctypes para las funciones de acceso.