在python中访问内存地址

时间:2011-11-23 23:42:13

标签: python memory memory-address

我的问题是:如何在python中读取内存地址的内容? 例: ptr = id(7) 我想读一下ptr指出的内存内容。 感谢。

5 个答案:

答案 0 :(得分:35)

看看ctypes.string_at。这是一个例子。它转储Python 3整数的原始数据结构。希望你只是做这个练习。没理由用纯Python做到这一点。

from ctypes import string_at
from sys import getsizeof
from binascii import hexlify
a = 0x7fff 
print(hexlify(string_at(id(a), getsizeof(a))))

输出

b'02000000d8191e1e01000000ff7f'

答案 1 :(得分:8)

在Python中,除非您正在与C应用程序连接,否则通常不会使用指针来访问内存。如果这是您所需要的,请查看访问者功能的ctypes module

答案 2 :(得分:4)

  

“我想读取ptr指向的内存内容”

用C编写代码。使用Python中的代码。 http://docs.python.org/extending/extending.html

答案 3 :(得分:1)

您是否试图“反转”id以从thing的结果中获取Python对象id(thing)?我甚至不知道是否可以这样做,绝对不应该这样做;它会打败垃圾收集并导致内存安全性不足。如果你的程序这样做,这意味着你有效地引用垃圾收集器不知道的东西(id数字)是引用,所以它可以释放你仍在使用的对象(取决于在其余的计划)。

如果你试图从你从C扩展名返回的指针中读取原始内存,那么其他答案可能对你有帮助。

答案 4 :(得分:0)

如果您尝试访问较大的二进制文件(例如图像和视频),而不必永远需要它们在内存中,请考虑使用[weakref][1]