logo

sizeof în Python

Când scriem scripturi mari sau cod de mai multe linii, gestionarea memoriei ar trebui să fie prioritatea noastră maximă. Prin urmare, ar trebui să avem cunoștințe bune despre manipularea eficientă a memoriei, pe lângă cunoștințe bune de programare. Avem multe funcții date în Python pentru a obține dimensiunea în memorie a unui anumit obiect prezent în program, iar una dintre astfel de funcții este __sizeof__(). În acest tutorial, vom afla despre funcția __sizeof__() și funcționarea acesteia în cadrul unui program Python.

Funcția Python __sizeof__().

Funcția __sizeof__() din Python nu ne spune exact dimensiunea obiectului. Nu returnează dimensiunea unui obiect generator, deoarece Python nu ne poate spune în prealabil cât de mult este dimensiunea unui generator. Totuși, în realitate, returnează dimensiunea internă pentru un anumit obiect (în octeți) care ocupă memoria.

Pentru a înțelege acest lucru, să ne uităm la următorul exemplu de program cu un obiect generator nesfârșit.

Exemplul 1: Uită-te la următorul 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__()) 

Ieșire

 Internal memory size of endless generator object: 120 

Explicaţie:

Am folosit o funcție implicită, adică endlessGenerator(), pentru a crea un obiect generator fără sfârșit în program. În funcție, am inițializat o variabilă, adică counting = 0. Am folosit o buclă while pe variabila de numărare fără a da un punct de întrerupere a buclei. Prin crearea unei bucle infinite în funcție, am făcut ca funcția implicită un obiect generator fără sfârșit. În cele din urmă, am tipărit dimensiunea memoriei interne a obiectului generator fără sfârșit folosind funcția __sizeof__().

Acum, putem înțelege clar funcționarea funcției __sizeof__(). Deoarece obiectul generator fără sfârșit din programul de mai sus nu are niciun capăt sau punct de întrerupere, Python nu ne poate spune în prealabil dimensiunea generatorului. Dar, în același timp, putem verifica dimensiunea memoriei interne alocate obiectului generator de către funcția __sizeof__(), deoarece trebuie să ocupe o parte din memorie internă în Python.

Să ne uităm la încă un exemplu în care folosim funcția __sizeof__() pentru a obține dimensiunea memoriei interne fără nicio suprasarcină.

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

Ieșire

 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 

Explicaţie:

Folosind funcția __sizeof__(), putem vedea clar că dimensiunea memoriei interne a unei liste goale este de 40 de octeți și fiecare element prezent în listă adaugă dimensiunea de 8 octeți la dimensiunea totală a memoriei listei.