logo

sizeof у Python

Коли ми пишемо великі сценарії або багаторядковий код, керування пам’яттю має бути нашим головним пріоритетом. Тому ми повинні мати хороші знання щодо ефективного поводження з пам’яттю на додаток до хороших знань програмування. У Python є багато функцій для отримання розміру в пам’яті конкретного об’єкта, наявного в програмі, і однією з таких функцій є __sizeof__(). У цьому підручнику ми дізнаємося про функцію __sizeof__() та її роботу в програмі Python.

Функція __sizeof__() Python

Функція __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__()) 

Вихід

містить метод java
 Internal memory size of endless generator object: 120 

Пояснення:

Ми використали функцію за замовчуванням, тобто endlessGenerator(), щоб створити об’єкт нескінченного генератора в програмі. У функції ми ініціалізували змінну, тобто підрахунок = 0. Ми використали цикл while для змінної підрахунку без встановлення точки зупину в циклі. Створивши нескінченний цикл у функції, ми зробили функцію за замовчуванням нескінченним генераторним об’єктом. Нарешті, ми надрукували розмір внутрішньої пам’яті об’єкта нескінченного генератора за допомогою функції __sizeof__().

динамічний масив java

Тепер ми можемо чітко зрозуміти, як працює функція __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 байтів до загального розміру пам’яті списку.