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

如何在python中打印对象的内存内容?,python,memory,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]); double d=234.5; 无符号字符*p=(无符号字符*)&d; 尺寸i; 对于(i=0;i

与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]);
double d=234.5;
无符号字符*p=(无符号字符*)&d;
尺寸i;
对于(i=0;i
是的,我知道我们可以使用pickle.dump()来序列化对象,但它似乎生成了很多冗余的东西。。
我们如何在python中以纯粹的方式实现这一点?

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


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

Python对象的内部内存表示无法从Python代码逻辑级别获得,您需要编写一个C扩展

如果您正在设计自己的序列化协议,那么可能您正在寻找的就是该模块。它允许将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中查看字节的数字代码,您需要使用
打印映射(ord,struct.pack(…)

为什么需要这个?我认为不编写自定义C扩展名是不可能的。至少这相当困难,因为没有“获取内存中对象的字节表示”这样的东西。您可以执行
字节(something)
,但结果不会是表示内存中对象的字节(至少在正常情况下是这样)。此外,内部表示将完全无用,因为它未定义,并且包含引用计数等实现细节。
pickle
实际上是一种基于堆栈的编程语言,用于序列化python对象。我相信它是图灵完全的,因为它可以做python可以做的任何事情。这也解释了为什么您不应该取消勾选您不信任的数据,因为您正在执行任意代码。在python 2中显示['\x1f','\x85','\xeb','Q','\xb8','\x1e','\t','@']。7@bpceee:使用Python2,在Python3
struct.pack
中返回字节对象,而不是字符串。要查看Python2.x中的字节值,需要使用
map(ord,struct.pack(…)