根据这篇文章What is a fast pythonic way to deepcopy just data from a python dict or list ? msgpack比copy.deepcopy
快10倍,但我无法弄清楚如何使用它。
我试过
item2 = msgpack.unpack(msgpack.packb(item1))
取代:
item2 = copy.deepcopy(item1)
但是我得到了
File "msgpack/_unpacker.pyx", line 228, in msgpack._unpacker.unpack
AttributeError: 'bytes' object has no attribute 'read'
位于http://msgpack-python.readthedocs.io/en/latest/api.html的文档难以理解,但这并不奇怪,因为几乎所有的计算机文档对我来说都是不可理解的。
答案 0 :(得分:1)
如果查看文档,msgpack.unpack
需要一个流,而不是一个字节块:
>>> help(msgpack.unpack)
Help on built-in function unpack in module msgpack._unpacker:
unpack(...)
unpack(stream, object_hook=None, list_hook=None, bool use_list=1, encoding=None, unicode_errors='strict', object_pairs_hook=None, ext_hook=ExtType, Py_ssize_t max_str_len=2147483647, Py_ssize_t max_bin_len=2147483647, Py_ssize_t max_array_len=2147483647, Py_ssize_t max_map_len=2147483647, Py_ssize_t max_ext_len=2147483647)
就像您使用packb
打包对象一样,您应该使用unpackb
来解压缩它:
>>> item2 = msgpack.unpackb(msgpack.packb(item1))
答案 1 :(得分:0)
你正在使用packb()返回压缩字节,所以要解包,应该使用unpackb()
unpacmsgpack.unpackb(msgpack.packb(item1))