技术开发 频道

详解Python 3.1新变化之性能改善篇

  四、封装属性的管束

  Pickle 模块现在会对封装对象的属性名称进行管制,这意味着如果您封装了许多同名对象,那么这些对象必须具有相同的属性名称。因此,您不必给每个对象多次存放相同的字符串(属性名称),只需保存一个包含所有属性名称的一个表,并保存每个属性的索引即可(或者,仅保存向每个对象的标准属性名称集合中增加或删除的放动态属性)。这样做能够做到尽量减小封装,所以能够更快的加载(或拆封)。

  下面的代码中的测试程序定义了一个类A,它有三个很长的属性名称;然后又创建了一个列表,其中含有100000个字典;而每个字典都有一个长的键,并且用对象作为其值。 最后,它将整个列表封装成一个文件,然后对其进行拆封。下面我们看看它所需的时间。

  * Python 2.6: 0.58422702550888062

  
* Python 3.0: 0.580562502146

  
* Python 3.1: 0.0455559492111

  对于Python 3.0和3.1来说,此封装的大小都是200359字节。用时如下所示:

  * Python 2.6: 0.58422702550888062

  
* Python 3.0: 0.580562502146

  
* Python 3.1: 0.0455559492111
0
相关文章