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
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
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
10K integers will take up an additional 280K or so bytes of memory, in addition to the list size of 87K.