Phy*_*ade 3 python numpy pickle python-c-api python-3.x
Numpy数组,即扩展类型(也称为使用扩展C API定义),声明Python解释器范围之外的其他字段(例如data属性Buffer Structure,如Numpy的数组接口中所记录的那样.
能够序列化它,Python 2曾经使用该__reduce__函数作为pickle协议的一部分,如文档中所述,并在此解释.
但是,即使__reduce__仍然存在于Python 3中,该Pickle protocol部分(以及更为Pickling and unpickling extension types复杂的部分)已从文档中删除,因此不清楚它是做什么的.
此外,还有与酸洗扩展类型相关的其他条目:
Pickle interface constructor registration for extension types,但copyreg模块本身没有提及扩展类型.那么,所有这些与Numpy数组有什么关系:
__reduce__告知Python如何腌制它们(或copyreg)?Numpy对象仍然暴露一个__reduce__方法,但可能是出于兼容性原因.buffer protocol),所以为了挑选numpy数组,不需要任何补充吗?Python 3 pickle仍然支持__reduce__,它包含在Pickling Class Instances部分中.
Numpy的支持在这方面没有改变; 它__reduce__在数组上实现以支持Python 2或3中的pickling:
>>> import numpy
>>> numpy.array(0).__reduce__()
(<built-in function _reconstruct>, (<class 'numpy.ndarray'>, (0,), b'b'), (1, (), dtype('int64'), False, b'\x00\x00\x00\x00\x00\x00\x00\x00'))
Run Code Online (Sandbox Code Playgroud)
返回一个三元素元组,包括一个用于重新创建值的函数对象,一个用于该函数的参数元组,以及一个传递否的状态元组newinstance.__setstate__().