簡體   English   中英

您如何使用msgpack替換Python中的copy.deepcopy?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM