Which uses less memory?

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Sun Nov 18 18:20:14 CET 2007


En Sat, 17 Nov 2007 19:30:04 -0300, Nick Craig-Wood <nick at craig-wood.com>  
escribi�:

>>  I'm working on an application that is very memory intensive, so we're
>>  trying to reduce the memory footprint of classes wherever possible.  I
>
> I'd guess that if you __slot__-ed the Domain class then you'll find
> the overhead of a type attribute is minimal (4 bytes per instance I
> think).
>
> No idea about Hessian or Stomp (never heard of them!) but classes with
> __slot__s are normal classes which would pickle or unpickle.

Actually classes with __slots__ require that you write your own  
__getstate__ and __setstate__. The following implementation may be enough  
in simple cases:

py> class X(object):
...     __slots__ = ('foo','bar')
...
py> x = X()
py> x.foo = 123
py> dumps(x)
Traceback (most recent call last):
...
TypeError: a class that defines __slots__ without defining __getstate__  
cannot b
e pickled

class X(object):
     __slots__ = ('foo','bar')
     def __getstate__(self):
         return dict((name, getattr(self, name))
           for name in self.__slots__
           if hasattr(self, name))
     def __setstate__(self, state):
         for name,value in state.iteritems():
             setattr(self, name, value)

py> x = X()
py> x.foo = 123
py> p = dumps(x)
py> x2 = loads(p)
py> type(x2)
<class '__main__.X'>
py> x2.foo
123
py> x2.bar
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
AttributeError: bar

-- 
Gabriel Genellina




More information about the Python-list mailing list