<p>我是<code>dill</code>的作者。在</p>
<p>您可以在<code>python3</code>中使用<code>dill</code>,而不直接使用<code>dill</code>。。。然而,它还不如<code>python2</code>中的好。在</p>
<pre><code>>>> import dill
>>> import pickle
>>> pickle._dumps(lambda x:x*x)
b'\x80\x03cdill.dill\n_create_function\nq\x00(cdill.dill\n_load_type\nq\x01X\x08\x00\x00\x00CodeTypeq\x02\x85q\x03Rq\x04(K\x01K\x00K\x01K\x02KCC\x08|\x00\x00|\x00\x00\x14Sq\x05N\x85q\x06)X\x01\x00\x00\x00xq\x07\x85q\x08X\x07\x00\x00\x00<stdin>q\tX\x08\x00\x00\x00<lambda>q\nK\x01C\x00q\x0b))tq\x0cRq\rc__main__\n__dict__\nh\nNN}q\x0etq\x0fRq\x10.'
</code></pre>
<p>您将注意到<code>_dumps</code>。也许你觉得这很奇怪。它是。这是因为在<code>python3</code>中,<code>pickle</code>已与以前称为<code>cPickle</code>的模块合并。奇怪的是:</p>
<ol>
<li><code>import _pickle</code>提供旧的<code>cPickle</code>模块</li>
<li><code>import pickle</code>提供了<code>pickle</code>模块,并将<code>cPickle</code>合并在一起</li>
<li><code>pickle.dumps</code>只是<code>_pickle.dumps</code>(即,它是<code>cPickle</code>)</li>
<li><code>pickle._dumps</code>是旧的<code>pickle.dumps</code>函数</li>
</ol>
<p>令人困惑?它的关键是:<code>pickle.dumps</code>被编码在<code>C</code>中。<code>2.x</code>版本的<code>pickle.dumps</code>是用python编写的,但是现在它被<code>cPickle.dumps</code>所取代。如果你想得到“旧”的版本,你可以。。。它是<code>pickle._dumps</code>。在</p>
<p>当您<code>import dill</code>时,<code>dill</code>会自动注册它知道如何序列化到<code>pickle</code>序列化表的所有对象<code>python</code>而不是{<cd21>}。所以,在<code>python3</code>中,这意味着连接到<code>pickle._dumps</code>的那个。在</p>
<p>我建议直接使用<code>dill.dumps</code>。在</p>
^{pr2}$
<p>我想让<code>C</code>表最终正常工作。。。在</p>