Ko pišemo velike skripte ali kodo z veliko vrsticami, bi moralo biti upravljanje pomnilnika naša največja prednostna naloga. Zato bi morali imeti poleg dobrega znanja programiranja tudi dobro znanje o učinkovitem ravnanju s pomnilnikom. V Pythonu imamo veliko funkcij za pridobitev velikosti v pomnilniku določenega predmeta, ki je prisoten v programu, in ena od takih funkcij je __sizeof__(). V tej vadnici bomo spoznali funkcijo __sizeof__() in njeno delovanje v programu Python.
zamenjava pomnilnika
Funkcija Python __sizeof__().
Funkcija __sizeof__() v Pythonu nam ne pove natančno velikosti predmeta. Ne vrne velikosti objekta generatorja, ker nam Python ne more vnaprej povedati, kakšna je velikost generatorja. Kljub temu v resnici vrne notranjo velikost za določen objekt (v bajtih), ki zaseda pomnilnik.
Da bi to razumeli, si oglejmo naslednji primer programa z neskončnim objektom generatorja.
Primer 1: Oglejte si naslednji program 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__())
Izhod
Internal memory size of endless generator object: 120
Pojasnilo:
Za ustvarjanje objekta neskončnega generatorja v programu smo uporabili privzeto funkcijo, tj. endlessGenerator(). V funkciji smo inicializirali spremenljivko, tj. štetje = 0. Za spremenljivko štetja smo uporabili zanko while, ne da bi zanki podali prekinitveno točko. Z ustvarjanjem neskončne zanke v funkciji smo naredili privzeto funkcijo kot neskončni objekt generatorja. Končno smo s funkcijo __sizeof__() natisnili velikost notranjega pomnilnika objekta neskončnega generatorja.
if-else java
Zdaj lahko jasno razumemo delovanje funkcije __sizeof__(). Ker objekt neskončnega generatorja v zgornjem programu nima konca ali prekinitvene točke, nam Python ne more vnaprej povedati velikosti generatorja. Toda hkrati lahko preverimo velikost notranjega pomnilnika, ki je predmetu generatorja dodeljena s funkcijo __sizeof__(), saj mora v Pythonu zasesti nekaj notranjega pomnilnika.
Poglejmo še en primer, kjer uporabimo funkcijo __sizeof__() za pridobitev velikosti notranjega pomnilnika brez dodatnih stroškov.
Primer 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__())
Izhod
izberite kot
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
Pojasnilo:
S funkcijo __sizeof__() lahko jasno vidimo, da je velikost notranjega pomnilnika praznega seznama 40 bajtov in vsak element, ki je prisoten na seznamu, skupni velikosti pomnilnika seznama doda velikost 8 bajtov.