Check memory usage of your Python objects

With sys.getsizeof() you can check the memory usage of an object. To do so, first import the module sys:

import sys

mylist = range(0, 10000)
print(sys.getsizeof(mylist))
# 48Code language: Python (python)

Woah… wait… why is this huge list only 48 bytes?

It’s because the range function returns an iterable object that only behaves like a list of numbers, but internally simply keeps count of the last iteration number. A range is magnitudes more memory efficient than using an actual list of numbers.

You can see for yourself by using a list comprehension to create an actual Python list of numbers from the same range:

import sys

myreallist = [x for x in range(0, 10000)]
print(sys.getsizeof(myreallist))
# 87632Code language: Python (python)

That’s roughly 87KB for 10,000 numbers.

Not very accurate

One thing to note: this method is not very accurate. sys.getsizeof will not recursively calculate the memory usage of all objects in a list or dictionary. So when requesting the size of a list, you request only the size of the list itself and all its references to the content, but the size of all those integers themselves is not taken into account. E.g., a Python integer takes up 28 bytes by itself:

>>> import sys
>>> sys.getsizeof(1)
28
>>> 10000 * 28
280000Code language: Python (python)

10K integers will take up an additional 280K or so bytes of memory, in addition to the list size of 87K.

Leave a Comment