Example:
import sys
class Test():
def __init__(self):
self.a = 'a'
self.b = 'b'
self.c = 'c'
self.d = 'd'
self.e = 'e'
if __name__ == '__main__':
test = [Test() for i in range(100000)]
print(sys.getsizeof(test))
In windows task manager: I am getting a jump of ~20 MB when creating a list of 100000 vs 10.
Using sys.getsizeoff(): For a list of 100000, I get 412,236 bytes; for a list of 10, I get 100 bytes.
This seems hugely disproportionate. Why is this happening?
The memory assigned is not disproportional; you are creating 100,000 objects! As you can see, they take up roughly 34 megabytes of space:
You can get a minor improvement with
__slots__, but you will still need about 20MB of memory to store those 100,000 objects.(With credit to mensi’s answer,
sys.getsizeofis not taking into account references. You can autocomplete to see most of the attributes of an object.)See SO answer: Usage of __slots__?
http://docs.python.org/release/2.5.2/ref/slots.html
To use
__slots__: