在Python中,沒有內置的sizeof
函數來直接獲取對象占用的內存大小
import sys
def get_size(obj, seen=None):
if seen is None:
seen = set()
obj_id = id(obj)
if obj_id in seen:
return 0
seen.add(obj_id)
size = sys.getsizeof(obj)
if isinstance(obj, dict):
size += sum([get_size(v, seen) for v in obj.values()])
size += sum([get_size(k, seen) for k in obj.keys()])
elif hasattr(obj, '__dict__'):
size += get_size(obj.__dict__, seen)
elif hasattr(obj, '__iter__') and not isinstance(obj, (str, bytes, bytearray)):
size += sum([get_size(i, seen) for i in obj])
return size
這個函數可以遞歸地計算對象及其所有引用對象的內存大小。請注意,這個函數并不完美,可能會產生一些誤差,因為它無法處理某些特殊類型的對象,如自定義類或C擴展。然而,在大多數情況下,它應該足夠好用。
使用示例:
my_list = [1, 2, 3, "hello", {"key": "value"}]
size = get_size(my_list)
print(f"Size of my_list: {size} bytes")
這將輸出my_list
及其引用對象所占用的內存大小(單位為字節)。