from pympler import asizeof
from gc import get_referents
import numpy as np
import sys
def getsize(obj):
"""sum size of object & members."""
seen_ids = set()
size = 0
objects = [obj]
while objects:
need_referents = []
for obj in objects:
if id(obj) not in seen_ids:
seen_ids.add(id(obj))
size += sys.getsizeof(obj)
need_referents.append(obj)
objects = get_referents(*need_referents)
return size
my_set8 = {np.uint8(x) for x in range(256)}
my_set16 = {np.uint16(x) for x in range(65536)}
print(f"{asizeof.asizeof(my_set8)=}")
print(f"{getsize(my_set8)=}")
print(f"{asizeof.asizeof(my_set16)=}")
print(f"{getsize(my_set16)=}")
Я хочу измерить использование оперативной памяти структурой данных. Но разные методы дают разные ответы. Вот MWE: [code]from pympler import asizeof from gc import get_referents import numpy as np import sys
def getsize(obj): """sum size of object & members.""" seen_ids = set() size = 0 objects = [obj] while objects: need_referents = [] for obj in objects: if id(obj) not in seen_ids: seen_ids.add(id(obj)) size += sys.getsizeof(obj) need_referents.append(obj) objects = get_referents(*need_referents) return size
my_set8 = {np.uint8(x) for x in range(256)} my_set16 = {np.uint16(x) for x in range(65536)} print(f"{asizeof.asizeof(my_set8)=}") print(f"{getsize(my_set8)=}") print(f"{asizeof.asizeof(my_set16)=}") print(f"{getsize(my_set16)=}") [/code] Это дает: [code]asizeof.asizeof(my_set8)=16616 getsize(my_set8)=14808 asizeof.asizeof(my_set16)=4194536 getsize(my_set16)=3801304 [/code] Чем объясняется большая разница между измерениями и какой из них верен?