如何在python中打印出对象的内存内容?

时间:2014-03-15 08:30:25

标签: python memory

与在C / C ++中一样,我们可以打印变量的内存内容,如下所示:

double d = 234.5;
unsigned char *p = (unsigned char *)&d;
size_t i;
for (i=0; i < sizeof d; ++i)
    printf("%02x\n", p[i]);

是的,我知道我们可以使用pickle.dump()来序列化一个对象,但它似乎产生了很多多余的东西.. 我们如何才能以纯粹的方式在python中实现这一目标?

2 个答案:

答案 0 :(得分:2)

无法从Python代码逻辑级别访问Python对象的内部内存表示,并且您需要编写C扩展。

如果您正在设计自己的序列化协议,那么struct模块就是您正在寻找的模块。它允许从Python值转换为二进制数据,并以您指定的格式返回。例如

import struct
print(list(struct.pack('d', 3.14)))

将显示[31, 133, 235, 81, 184, 30, 9, 64],因为它们是3.14的双精度表示的字节值。

注意:struct.pack在Python 3.x中返回bytes对象,但在Python 2.x中返回str对象。要查看Python 2.x中字节的数字代码,您需要使用print map(ord, struct.pack(...))代替。

答案 1 :(得分:1)

你不能在纯python中做到这一点。但你可以在C中编写一个Python扩展模块,它完全符合你的要求。但它可能不会非常有用。您可以阅读有关扩展模块here

的更多信息

我认为Python是指C-Python,而不是PyPy,Jython或IronPython。