Memory usage per top 10x usage per heapy

Tim Chase python.list at tim.thechases.com
Tue Sep 25 19:35:53 EDT 2012


On 09/25/12 17:55, Oscar Benjamin wrote:
> On 25 September 2012 23:10, Tim Chase <python.list at tim.thechases.com> wrote:
>> If tuples provide a savings but you find them opaque, you might also
>> consider named-tuples for clarity.
> 
> Do they have the same memory usage?
> 
> Since tuples don't have a per-instance __dict__, I'd expect them to be a
> lot lighter. I'm not sure if I'm interpreting the results below properly
> but they seem to suggest that a namedtuple can have a memory consumption
> several times larger than an ordinary tuple.

I think the "how much memory is $METHOD using" topic of the thread
is the root of the problem.  From my testing of your question:

>>> import collections, sys
>>> A = collections.namedtuple('A', ['x', 'y'])
>>> nt = A(1,3)
>>> t = (1,3)
>>> sys.getsizeof(nt)
72
>>> sys.getsizeof(t)
72
>>> nt_s = set(dir(nt))
>>> t_s = set(dir(t))
>>> t_s ^ nt_s
set(['__module__', '_make', '_asdict', '_replace', '_fields',
'__slots__', 'y', 'x'])
>>> t_s - nt_s
set([])

So a named-tuple has 6+n (where "n" is the number of fields) extra
attributes, but it seems that namedtuples & tuples seem to occupy
the same amount of space (72).

Additionally, pulling up a second console and issuing

  ps v | grep [p]ython

shows the memory usage of the process as I perform these, and after
them, and they both show the same usage (actual test was

1) pull up a fresh python
2) import sys, collections; A = collections.namedtuple('A',['x','y'])
3) check memory usage in other window
4a) x = (1,2)
4b) x = A(1,2)
5) check memory usage again in other window
6) quit python

performing 4a on one run, and 4b on the second run.

Both showed identical memory usage as well (Debian Linux (Stable),
stock Python 2.6.6) at the system level.

I don't know if that little testing is actually worth anything, but
at least it's another data-point as we muddle towards helping
MrsEntity/junkshops.

-tkc






More information about the Python-list mailing list