-
Notifications
You must be signed in to change notification settings - Fork 13
/
mem.py
37 lines (32 loc) · 1.18 KB
/
mem.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import sys
from types import ModuleType, FunctionType
from gc import get_referents
from flee import flee
from flee import pflee
# Custom objects know their class.
# Function objects seem to know way too much, including modules.
# Exclude modules as well.
BLACKLIST = type, ModuleType, FunctionType
def getsize(obj):
"""sum size of object & members."""
if isinstance(obj, BLACKLIST):
raise TypeError('getsize() does not take argument of type: '+ str(type(obj)))
seen_ids = set()
size = 0
objects = [obj]
while objects:
need_referents = []
for obj in objects:
if not isinstance(obj, BLACKLIST) and id(obj) not in seen_ids:
seen_ids.add(id(obj))
size += sys.getsizeof(obj)
need_referents.append(obj)
print(size, type(obj), obj)
objects = get_referents(*need_referents)
return size
e = pflee.Ecosystem()
#print(getsize(flee.Person(flee.Location("A"))))
#print(getsize(flee.Location("A")))
print(getsize(pflee.Person(e.scores, pflee.Location(e, 0, "A"))))
print(sys.getsizeof(pflee.Person(e.scores, pflee.Location(e, 0, "A"))))
#print(getsize(pflee.Location(e, 0, "A")))