Kun kirjoitamme suuria skriptejä tai usean rivin koodia, muistinhallinnan tulisi olla äärimmäisen tärkeä asia. Siksi meillä pitäisi olla hyvä tieto muistin tehokkaasta käsittelystä hyvän ohjelmointitiedon lisäksi. Pythonissa on monia toimintoja, joilla saadaan ohjelmassa olevan objektin koko muistiin, ja yksi sellaisista funktioista on __sizeof__(). Tässä opetusohjelmassa opimme __sizeof__()-funktiosta ja sen toiminnasta Python-ohjelman sisällä.
unix luo hakemiston
Python __sizeof__() -funktio
Pythonin __sizeof__()-funktio ei kerro tarkasti objektin kokoa. Se ei palauta generaattoriobjektin kokoa, koska Python ei voi kertoa meille etukäteen, kuinka suuri generaattori on. Silti todellisuudessa se palauttaa tietyn muistin varaavan objektin sisäisen koon (tavuina).
Tämän ymmärtämiseksi katsokaamme seuraavaa esimerkkiohjelmaa, jossa on loputon generaattoriobjekti.
Esimerkki 1: Katso seuraava Python-ohjelma:
# 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__())
Lähtö
Internal memory size of endless generator object: 120
Selitys:
Olemme käyttäneet oletusfunktiota, eli endlessGenerator(), luodaksemme loputtoman generaattoriobjektin ohjelmaan. Funktiossa olemme alustaneet muuttujan, eli counting = 0. Olemme käyttäneet laskentamuuttujassa while-silmukkaa antamatta silmukalle katkeamispistettä. Luomalla funktioon äärettömän silmukan, olemme tehneet oletusfunktiosta loputtoman generaattoriobjektin. Lopuksi olemme tulostaneet loputtoman generaattoriobjektin sisäisen muistin koon käyttämällä __sizeof__()-funktiota.
rivi autocad-komento
Nyt voimme selvästi ymmärtää funktion __sizeof__() toiminnan. Koska yllä olevan ohjelman loputtomalla generaattoriobjektilla ei ole loppu- tai keskeytyskohtaa, Python ei voi kertoa meille generaattorin kokoa etukäteen. Mutta samalla voimme tarkistaa generaattoriobjektille varatun sisäisen muistin koon __sizeof__() -funktiolla, koska sen täytyy varata jonkin verran sisäistä muistia Pythonissa.
Katsotaanpa vielä yhtä esimerkkiä, jossa käytämme __sizeof__()-funktiota saadaksemme sisäisen muistin koon ilman lisäkustannuksia.
Esimerkki 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__())
Lähtö
c-ohjelma kaksiulotteiselle taulukolle
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
Selitys:
Funktiolla __sizeof__() näemme selvästi, että tyhjän listan sisäisen muistin koko on 40 tavua ja jokainen listassa oleva elementti lisää 8 tavua listan kokonaismuistin kokoon.