python - Python中有比 "marshal"或 "cPickle"更底层的对象操作函数吗?

标签 python c

例如,根据 Python 源代码,Marshal 仍在解析输入数据。

.....
case TYPE_FALSE:
    Py_INCREF(Py_False);
    retval = Py_False;
    break;

case TYPE_TRUE:
    Py_INCREF(Py_True);
    retval = Py_True;
    break;

case TYPE_INT:
    retval = PyInt_FromLong(r_long(p));
    break;

case TYPE_INT64:
    retval = r_long64(p);
    break;

case TYPE_LONG:
    retval = r_PyLong(p);
    break;

case TYPE_FLOAT:
.......

Python中有没有比“marshal”或“c​​Pickle”更底层的对象操作函数?

例如,我已经将转储的数据加载到内存中,我只想像在 C/C++ 中那样进行类型转换,(PyObject *) data_loaded_in_memory;

编辑:如果这不能直接在 python 中完成,任何有关 C 函数编写该能力的提示都会很棒。

最佳答案

不要认为你可以只获取 python 对象的内存镜像,存储它,稍后将它加载回不同的解释器甚至同一个解释器并期望它有意义。它不会。整数和 float 可能完全包含在对象结构中,但字符串已经有一个单独分配的数据缓冲区,甚至长整数也有。

换句话说,cPickle 是可能的最低层(cPicklemarshal 低,因为后者保持版本和版本之间的兼容性平台,cPickle 没有)允许存储对象并将它们加载到另一个解释器或同一个解释器(如果它们在两者之间从内存中释放)。

关于python - Python中有比 "marshal"或 "cPickle"更底层的对象操作函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6952109/

相关文章:

c - 将 C 字符串解析为数字和运算符

c - 使用 C 的 u64 十进制到十六进制

c - 如何创建一个计时器,从每秒变量中删除 1

python - 为什么 pygame.MOUSEBUTTONDOWN 永远不等于我的按钮,即使用户单击它?

python - 如何对第一个值相同的列表中的元组求和?

c - const 变量什么时候初始化?

java - c - .class 的等价物

python - 将国家映射到经纬度信息

python - 重复存储在变量中的字符串 x 次

python - Python中列的绝对值