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 байта към общия размер на паметта на списъка.