logo

sizeof ב- Python

כאשר אנו כותבים סקריפטים גדולים או קוד של שורות רבות, ניהול הזיכרון צריך להיות בראש סדר העדיפויות שלנו. לכן, עלינו להיות בעלי ידע טוב בטיפול בזיכרון ביעילות בנוסף לידע טוב בתכנות. יש לנו פונקציות רבות שניתנו ב-Python כדי לקבל את הגודל בזיכרון של אובייקט מסוים הקיים בתוכנית, ואחת מהפונקציות כאלו היא __sizeof__(). במדריך זה, נלמד על הפונקציה __sizeof__() ועל פעולתה בתוך תוכנית Python.

פורמט מחרוזת java ארוך

פונקציית Python __sizeof__()

הפונקציה __sizeof__() ב- Python לא בדיוק אומרת לנו את גודל האובייקט. זה לא מחזיר את הגודל של אובייקט מחולל מכיוון ש-Python לא יכול להגיד לנו מראש כמה גודלו של מחולל. ובכל זאת, למעשה, הוא מחזיר את הגודל הפנימי עבור אובייקט מסוים (בבתים) התופס את הזיכרון.

כדי להבין זאת, הבה נסתכל על התוכנית הבאה לדוגמה עם אובייקט מחולל אינסופי.

דוגמה 1: תסתכל על תוכנית Python הבאה:

 # 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 

הֶסבֵּר:

השתמשנו בפונקציית ברירת מחדל, כלומר, endlessGenerator(), כדי ליצור אובייקט מחולל אינסופי בתוכנית. בפונקציה, אתחלנו משתנה, כלומר ספירה = 0. השתמשנו בלולאת while על משתנה הספירה מבלי לתת נקודת שבירה בלולאה. על ידי יצירת לולאה אינסופית בפונקציה, הפכנו את פונקציית ברירת המחדל כאובייקט מחולל אינסופי. לבסוף, הדפסנו את גודל הזיכרון הפנימי של אובייקט המחולל האינסופי באמצעות הפונקציה __sizeof__() .

כעת, אנו יכולים להבין בבירור את תפקוד הפונקציה __sizeof__(). מכיוון שלאובייקט המחולל האינסופי בתוכנית לעיל אין שום סוף או נקודת שבירה, Python לא יכול להגיד לנו את גודל המחולל מראש. אבל באותו הזמן, אנחנו יכולים לבדוק את גודל הזיכרון הפנימי שהוקצה לאובייקט המחולל על ידי פונקציית __sizeof__() מכיוון שהוא חייב להיות תופס זיכרון פנימי כלשהו ב- Python.

בואו נסתכל על דוגמה נוספת שבה אנו משתמשים בפונקציה __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 בתים לגודל הזיכרון הכולל של הרשימה.