logo

izmērs Python

Kad mēs rakstām lielus skriptus vai daudzu rindu kodu, atmiņas pārvaldībai ir jābūt mūsu galvenajai prioritātei. Tāpēc papildus labām programmēšanas zināšanām mums vajadzētu būt labām zināšanām par efektīvu atmiņas apstrādi. Mums ir daudzas Python funkcijas, lai iegūtu konkrēta programmā esošā objekta lielumu atmiņā, un viena no šādām funkcijām ir __sizeof__(). Šajā apmācībā mēs uzzināsim par funkciju __sizeof__() un tās darbību Python programmā.

Python __sizeof__() funkcija

Python funkcija __sizeof__() precīzi nenosaka objekta lielumu. Tas neatgriež ģeneratora objekta izmēru, jo Python nevar mums iepriekš pateikt, cik liels ir ģeneratora izmērs. Tomēr patiesībā tas atgriež konkrēta objekta iekšējo izmēru (baitos), kas aizņem atmiņu.

Lai to saprastu, apskatīsim šādu programmas piemēru ar nebeidzamu ģeneratora objektu.

buļļi vs vērsis

1. piemērs: Apskatiet šo Python programmu:

 # 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__()) 

Izvade

 Internal memory size of endless generator object: 120 

Paskaidrojums:

Mēs esam izmantojuši noklusējuma funkciju, t.i., endlessGenerator (), lai programmā izveidotu bezgalīgu ģeneratora objektu. Funkcijā mēs esam inicializējuši mainīgo, t.i., skaitīšana = 0. Mēs esam izmantojuši skaitīšanas mainīgo cilpu, nesniedzot cilpas pārtraukuma punktu. Izveidojot funkcijā bezgalīgu cilpu, mēs esam izveidojuši noklusējuma funkciju kā bezgalīgu ģeneratora objektu. Visbeidzot, mēs esam izdrukājuši bezgalīgā ģeneratora objekta iekšējās atmiņas lielumu, izmantojot funkciju __sizeof__().

kā izlauzties no brīža cilpas java

Tagad mēs varam skaidri saprast funkcijas __sizeof__() darbību. Tā kā iepriekš minētajā programmā bezgalīgajam ģeneratora objektam nav beigu vai pārtraukuma punkta, Python nevar mums iepriekš pateikt ģeneratora izmēru. Bet tajā pašā laikā mēs varam pārbaudīt iekšējās atmiņas lielumu, kas piešķirts ģeneratora objektam, izmantojot funkciju __sizeof__(), jo tam ir jāaizņem daļa iekšējās atmiņas Python.

Apskatīsim vēl vienu piemēru, kur mēs izmantojam funkciju __sizeof__(), lai iegūtu iekšējās atmiņas lielumu bez papildu izmaksām.

2. piemērs:

 # 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__()) 

Izvade

sesija ir beigusies
 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 

Paskaidrojums:

Izmantojot funkciju __sizeof__(), mēs varam skaidri redzēt, ka tukša saraksta iekšējās atmiņas lielums ir 40 baiti un katrs sarakstā esošais elements pievieno 8 baitu lielumu saraksta kopējam atmiņas apjomam.