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

2024-06-16 10:57:29 发布

您现在位置:Python中文网/ 问答频道 /正文

如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]);

是的,我知道我们可以用泡菜。倾倒()序列化一个对象,但它似乎生成了很多冗余的东西。。 我们如何在python中以一种纯粹的方式实现这一点呢?在


Tags: 对象内存内容forsize序列化方式泡菜
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在python3.x中返回一个bytes对象,而在python2.x中返回一个str对象。要查看python2.x中字节的数字代码,需要改为使用print map(ord, struct.pack(...))。在

在纯python中不能这样做。但是,您可以用C编写一个Python扩展模块,它完全可以满足您的要求。但这可能不会很有用。您可以阅读更多关于扩展模块here

我假设Python指的是C-Python,而不是PyPy、Jython或IronPython。在

相关问题 更多 >