我怎样才能知道Python3使用的是cPickle还是Pickle?

我怎样才能知道Python3使用的是cPickle还是Pickle?,python,python-3.x,file,pickle,Python,Python 3.x,File,Pickle,我看到关于Pickle和cPickle的这两个答案由python 3自动处理,对用户来说是透明的: 我如何知道在Python3中是否使用了快速版本(cPickle)?我想强制它使用cPickle。我的主要兴趣甚至不是速度,而是文件的较短大小,因为我生成的文件最终会超过1GB。除非您从源代码构建Python二进制文件,否则您几乎肯定会使用C扩展名 但是,如果必须确定,请检查是否可以导入\u pickle模块: >>> import _pickle 只有当ImportEr

我看到关于Pickle和cPickle的这两个答案由python 3自动处理,对用户来说是透明的:


我如何知道在Python3中是否使用了快速版本(cPickle)?我想强制它使用cPickle。我的主要兴趣甚至不是速度,而是文件的较短大小,因为我生成的文件最终会超过1GB。

除非您从源代码构建Python二进制文件,否则您几乎肯定会使用C扩展名

但是,如果必须确定,请检查是否可以导入
\u pickle
模块:

>>> import _pickle
只有当ImportError失败时,才会使用纯Python实现


只是为了明确起见:在Python 2中被称为
cPickle
的东西已被重命名为
\u pickle
,并且是透明导入的,您不必做任何明确的事情来利用它。Python2中的
pickle
cPickle
之间存在一个分割,这让人很困惑。

如果导入失败,我会知道吗?然后引发
ImportError
。它只是一个模块,要么是可用的,因此将被使用,要么导入失败,出现通常的
ImportError
异常。难道
ImportError
不会被内部处理,而不是打印给我,因为它只会导入纯python pickle模块吗?我从未手动安装过cPickle,所以我只想确保它正在使用它。我将测试导入
\u pickle
以查看是否有任何变化。当然,Python3中没有cPickle模块。在Python3中,该模块被替换为
\u pickle