Jessie.Y's Den

A blog for recoding life in pieces

Arvin.W, another owner.


WELCOME TO OUR WORLD

Python的`__slots__`魔法

在Python中,每个类都有实例属性,默认情况下Python用一个字典来保存一个对象的实例属性。这非常有用,因为它允许我们在运行时去设置任意的新属性。

然而,对于有着已知属性的小类来说,它可能是个瓶颈,这个字典浪费了很多内存。Python不能在对象创建时直接分配一个固定量的内存来保存所有的属性,因此如果你创建许多对象(我指的是成千上万个),它会消耗掉很多内存。

不过还是有一个方法来规避这个问题。这个方法需要使用__slots__来告诉Python不要使用字典,而且只给一个固定集合的属性分配空间。

这里是一个使用与不使用__slots__的例子:

  • 不使用 __slots__:

    class MyClass(object):
      def __init__(self, name, identifier):
          self.name = name
          self.identifier = identifier
          self.set_up()
      # ...
    
  • 使用 __slots__:

    class MyClass(object):
      __slots__ = ['name', 'identifier']
      def __init__(self, name, identifier):
          self.name = name
          self.identifier = identifier
          self.set_up()
      # ...
    

第二段代码会为你的内存减轻负担。通过这个技巧,内存占用率几乎可以减少40%~50%。

备注一下,你也许需要试一下PyPy,它已经默认地做了所有这些优化。

最近的文章

有关标准方差的十万个为什么

Q1: 什么叫标准方差?A:标准方差(或者标准差,英语:Standard Deviation, SD),数学符号为 (sigma),在概率统计中作为一组数值的离散程度。标准差定义为:方差的算术平方根。Q2:方差又是什么?A:方差(Variance),在概率论中,一个随机变量的方差描述的是随机变量的离散程度,即该随机变量距离其期望值的距离。定义:设为服从分布的随机变量,如果是随机变量的期望值(平均数 ),则随机变量 的方差为:回到Q1,标准差的定义为:Q3:有了方差为什么需要标准差?A:方差...…

继续阅读
更早的文章

Python中的*args 和 **kwargs

*args 和 **kwargs 主要用于函数的定义,可以将不确定数量的参数传递给一个函数。*args的用法*args是用来发送一个非键值对的可变数量的参数列表给一个函数。例子1:def test_var_args(f_arg, *args): print "first normal arg:", f_arg for arg in args: print "another arg through *argv:", argtest_var_args(‘python...…

继续阅读