[英]How do you use msgpack to replace copy.deepcopy in Python?
根據這篇文章, 什么是快速的pythonic方法來深度復制python dict或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的文檔令人難以理解,但這並不奇怪,因為幾乎所有計算機文檔對我來說都是令人難以理解的。
如果您查看文檔,則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
packb
進行打包:
>>> item2 = msgpack.unpackb(msgpack.packb(item1))
您正在使用返回打包字節的packb(),因此要拆包,應使用unpackb()
unpacmsgpack.unpackb(msgpack.packb(item1))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.