Skip to content

Instantly share code, notes, and snippets.

@fsimonis
Created April 24, 2026 08:26
Show Gist options
  • Select an option

  • Save fsimonis/d8f888882851ebf7f181ea859a6f77c0 to your computer and use it in GitHub Desktop.

Select an option

Save fsimonis/d8f888882851ebf7f181ea859a6f77c0 to your computer and use it in GitHub Desktop.
Memory footprint comparison of python classes
import sys
from abc import ABC, abstractmethod
class DictBase(ABC):
@abstractmethod
def do(self):
pass
class SlotBase(ABC):
__slots__=()
@abstractmethod
def do(self):
pass
def make_dict_class(n: int, bases:list[type]) -> type:
def __init__(self):
for i in range(n):
setattr(self, f"m{i}", i)
def do(self):
pass
return type(f"DictClass_{n}", tuple(bases), {"__init__": __init__, "do": do})
def make_slots_class(n: int, bases:list[type]) -> type:
slots = tuple(f"m{i}" for i in range(n))
def __init__(self):
for i in range(n):
setattr(self, f"m{i}", i)
def do(self):
pass
return type(f"SlotsClass_{n}", tuple(bases), {"__slots__": slots, "__init__": __init__, "do": do})
def getsize(obj):
return sys.getsizeof(obj) + ( sys.getsizeof(obj.__dict__) if hasattr(obj, "__dict__") else 0 ) + ( sys.getsizeof(obj.__weakref__) if hasattr(obj, "__weakref__") else 0 )
data = []
for n in range(50):
ddict_obj = make_dict_class(n, [DictBase])()
dslots_obj = make_slots_class(n, [DictBase])()
sdict_obj = make_dict_class(n, [SlotBase])()
sslots_obj = make_slots_class(n, [SlotBase])()
dict_obj = make_dict_class(n, [])()
slots_obj = make_slots_class(n, [])()
ddict_size = getsize(ddict_obj)
dslots_size = getsize(dslots_obj)
sdict_size = getsize(sdict_obj)
sslots_size = getsize(sslots_obj)
dict_size = getsize(dict_obj)
slots_size = getsize(slots_obj)
data.append([n, ddict_size , dslots_size , sdict_size , sslots_size, slots_size, dict_size])
import pandas
df = pandas.DataFrame(data, columns=["n", "dB d", "dB s", "sB d", "sB s", "s", "d"])
print(df.to_markdown(index=False))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment