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))
# 48
Code 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))
# 87632
Code 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
280000
Code language: Python (python)
10K integers will take up an additional 280K or so bytes of memory, in addition to the list size of 87K.