logo

sizeof في بايثون

عندما نكتب نصوصًا كبيرة أو تعليمات برمجية مكونة من عدة أسطر، يجب أن تكون إدارة الذاكرة أولويتنا القصوى. لذلك يجب أن يكون لدينا معرفة جيدة بالتعامل مع الذاكرة بكفاءة بالإضافة إلى المعرفة الجيدة بالبرمجة. لدينا العديد من الوظائف المعطاة في بايثون للحصول على الحجم في ذاكرة كائن معين موجود في البرنامج، وإحدى هذه الوظائف هي __sizeof__(). في هذا البرنامج التعليمي، سوف نتعرف على الدالة __sizeof__() وكيفية عملها داخل برنامج بايثون.

وظيفة بايثون __sizeof__()

الدالة __sizeof__() في بايثون لا تخبرنا بالضبط بحجم الكائن. لا يُرجع حجم كائن المولد حيث لا تستطيع Python إخبارنا مسبقًا بحجم حجم المولد. ومع ذلك، في الواقع، تقوم بإرجاع الحجم الداخلي لكائن معين (بالبايت) يشغل الذاكرة.

لفهم ذلك، دعونا نلقي نظرة على البرنامج التالي الذي يحتوي على كائن منشئ لا نهاية له.

نماذج التعلم الآلي

مثال 1: انظر إلى برنامج بايثون التالي:

 # A default function with endless generator object in it def endlessGenerator(): # A counting variable to initialize the generator counting = 0 # Using while loop to create an endless generator while True: yield counting counting += 1 # Creating infinite loop # Printing memory size of a generator object print('Internal memory size of endless generator object: ', endlessGenerator.__sizeof__()) 

انتاج |

 Internal memory size of endless generator object: 120 

توضيح:

لقد استخدمنا وظيفة افتراضية، أي،EndendGenerator()، لإنشاء كائن مولد لا نهاية له في البرنامج. في الدالة، قمنا بتهيئة متغير، أي العد = 0. لقد استخدمنا حلقة while على متغير العد دون إعطاء نقطة توقف في الحلقة. من خلال إنشاء حلقة لا نهائية في الوظيفة، جعلنا الوظيفة الافتراضية كائنًا منشئًا لا نهاية له. أخيرًا، قمنا بطباعة حجم الذاكرة الداخلية لكائن المولد اللامتناهي باستخدام الدالة __sizeof__().

كيفية تحويل السلسلة إلى char

الآن، يمكننا أن نفهم بوضوح عمل الدالة __sizeof__(). نظرًا لأن كائن المولد اللانهائي في البرنامج أعلاه ليس له أي نهاية أو نقطة توقف، فلا تستطيع بايثون إخبارنا بحجم المولد مسبقًا. لكن في الوقت نفسه، يمكننا التحقق من حجم الذاكرة الداخلية المخصصة لكائن المولد بواسطة الدالة __sizeof__() حيث يجب أن تشغل بعض الذاكرة الداخلية في بايثون.

دعونا نلقي نظرة على مثال آخر حيث نستخدم الدالة __sizeof__() للحصول على حجم الذاكرة الداخلية دون أي حمل.

مثال 2:

 # Define an empty list in the program emptyList = [] # Printing size of empty list print('Internal memory size of an empty list: ', emptyList.__sizeof__()) # Define some lists with elements a = [24] b = [24, 26, 31, 6] c = [1, 2, 6, 5, 415, 9, 23, 29] d = [4, 5, 12, 3, 2, 9, 20, 40, 32, 64] # Printing internal memory size of lists print('Memory size of first list: ', a.__sizeof__()) print('Memory size of second list: ', b.__sizeof__()) print('Memory size of third list: ', c.__sizeof__()) print('Memory size of fourth list: ', d.__sizeof__()) 

انتاج |

نوع التاريخ المكتوب
 Internal memory size of an empty list: 40 Memory size of first list: 48 Memory size of second list: 104 Memory size of third list: 104 Memory size of fourth list: 136 

توضيح:

باستخدام الدالة __sizeof__()، يمكننا أن نرى بوضوح أن حجم الذاكرة الداخلية لقائمة فارغة هو 40 بايت وكل عنصر موجود في القائمة يضيف حجم 8 بايت إلى إجمالي حجم الذاكرة للقائمة.