logo

dydis Python

Kai rašome didelius scenarijus arba daugelio eilučių kodą, atminties valdymas turėtų būti didžiausias mūsų prioritetas. Todėl, be gerų programavimo žinių, turėtume gerai išmanyti efektyvų atminties tvarkymą. Mes turime daug funkcijų, pateiktų Python, kad gautume tam tikro programoje esančio objekto dydį atmintyje, ir viena iš tokių funkcijų yra __sizeof__(). Šioje pamokoje sužinosime apie funkciją __sizeof__() ir jos veikimą Python programoje.

matricos daugyba c

Python __sizeof__() funkcija

Python funkcija __sizeof__() tiksliai nenurodo objekto dydžio. Tai nepateikia generatoriaus objekto dydžio, nes Python negali mums iš anksto pasakyti, kokio dydžio yra generatorius. Tačiau iš tikrųjų jis grąžina vidinį konkretaus objekto dydį (baitais), užimantį atmintį.

Norėdami tai suprasti, pažvelkime į toliau pateiktą programos pavyzdį su begaliniu generatoriaus objektu.

1 pavyzdys: Pažvelkite į šią Python programą:

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

Išvestis

 Internal memory size of endless generator object: 120 

Paaiškinimas:

Naudojome numatytąją funkciją, ty endlessGenerator(), kad sukurtume begalinį generatoriaus objektą programoje. Funkcijoje inicijavome kintamąjį, t. y. skaičiavimas = 0. Skaičiavimo kintamajame panaudojome ciklą, nesuteikdami cikle lūžio taško. Funkcijoje sukūrę begalinę kilpą, numatytąją funkciją padarėme kaip nesibaigiantį generatoriaus objektą. Galiausiai, naudodami funkciją __sizeof__() išspausdinome begalinio generatoriaus objekto vidinės atminties dydį.

Dabar galime aiškiai suprasti funkcijos __sizeof__() veikimą. Kadangi begalinis generatoriaus objektas aukščiau pateiktoje programoje neturi pabaigos ar lūžio taško, Python negali mums iš anksto pasakyti generatoriaus dydžio. Tačiau tuo pačiu metu galime patikrinti vidinės atminties dydį, skirtą generatoriaus objektui naudojant funkciją __sizeof__(), nes jis turi užimti tam tikrą vidinę atmintį Python.

Pažvelkime į dar vieną pavyzdį, kai naudojame funkciją __sizeof__(), kad gautume vidinės atminties dydį be jokių papildomų išlaidų.

2 pavyzdys:

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

Išvestis

 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 

Paaiškinimas:

Naudodami funkciją __sizeof__() aiškiai matome, kad tuščio sąrašo vidinės atminties dydis yra 40 baitų ir kiekvienas sąraše esantis elementas prideda 8 baitus prie bendro sąrašo atminties dydžio.