在Python中,sizeof()
函數是 sys.getsizeof()
的別名。這個函數用于計算Python對象(包括自定義對象)所占用的內存字節數。但是,對于自定義對象,你需要注意以下幾點:
sys.getsizeof()
只計算對象本身所占用的內存大小,而不會遞歸地計算對象內部的子對象所占用的內存。如果你的自定義對象包含其他對象(例如列表、字典等),你需要手動計算這些子對象的內存占用。
對于某些內置類型(如字符串、元組等),sys.getsizeof()
可能會返回一個比實際內存占用更大的值,因為它們會預留一些額外的空間以便在未來進行擴展。
如果你想要計算自定義對象及其子對象的總內存占用,你可以編寫一個遞歸函數來遍歷對象的所有屬性并累加它們的內存占用。
下面是一個示例,展示了如何計算一個包含列表和字典的自定義對象的總內存占用:
import sys
class CustomObject:
def __init__(self):
self.my_list = [1, 2, 3]
self.my_dict = {'a': 1, 'b': 2}
def get_total_memory_usage(obj):
total_size = sys.getsizeof(obj)
if isinstance(obj, dict):
for key, value in obj.items():
total_size += get_total_memory_usage(key) + get_total_memory_usage(value)
elif isinstance(obj, list):
for item in obj:
total_size += get_total_memory_usage(item)
elif hasattr(obj, '__dict__'):
for key, value in obj.__dict__.items():
total_size += get_total_memory_usage(key) + get_total_memory_usage(value)
return total_size
custom_obj = CustomObject()
print("Total memory usage of custom object:", get_total_memory_usage(custom_obj))
請注意,這個示例中的 get_total_memory_usage()
函數是一個簡單的遞歸函數,它可能無法處理所有類型的對象。在實際應用中,你可能需要根據需要對這個函數進行修改和擴展。