Python 3.8.2 (default, Jul 16 2020, 14:00:26)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getsizeof({})
64
>>> sys.getsizeof([])
56
>>> sys.getsizeof(set())
216Use memory-profiler package. The decorator @profile can be put around any function or method and running
$ python -m memory_profiler myscriptwould produce line-by-line memory usage data once the script exits.
Rather than having to profile an entire application, use guppy3. The workflow is along the folowing lines.
from guppy import hpy
h = hpy()
print(h.heap())This will print a table of usage grouped by object type. Here's an example of an new Python interpreter session:
Partition of a set of 143382 objects. Total size = 15643117 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 36882 26 3454101 22 3454101 22 str
1 25485 18 2339280 15 5793381 37 tuple
2 8460 6 1494124 10 7287505 47 types.CodeType
3 1412 1 1318456 8 8605961 55 type
4 17048 12 1273626 8 9879587 63 bytes
5 8172 6 1111392 7 10990979 70 function
6 26047 18 735680 5 11726659 75 int
7 1412 1 700864 4 12427523 79 dict of type
8 407 0 679320 4 13106843 84 dict of module
9 1211 1 534256 3 13641099 87 dict (no owner)
<337 more rows. Type e.g. '_.more' to view.>
This type of profiling can be difficult in large applications using a relatively small number of object types.
mprof (comes with the memory-profiler module) can show memory usage as a function of time (not line-by-line) over the lifetime of the application. This can be useful for verifying that memory is getting cleaned up and released periodically. To run it:
$ mprof run script script_argsmprof will automatically create a graph of the script’s memory usage over time, which can be viewed by running mprof plot.
Note that plotting requires matplotlib.
— Oliver Frolovs, 2020