logo

sizeof Pythonban

Amikor nagy szkripteket vagy soksoros kódot írunk, a memóriakezelésnek kell a legnagyobb prioritásunknak lennie. Ezért a jó programozási ismeretek mellett jó ismeretekkel kell rendelkeznünk a memória hatékony kezeléséről. A Pythonban számos függvényt adunk meg a programban jelenlévő egy adott objektum memória méretének lekérésére, és az egyik ilyen függvény a __sizeof__(). Ebben az oktatóanyagban megismerjük a __sizeof__() függvényt és annak Python programon belüli működését.

Python __sizeof__() függvény

A Python __sizeof__() függvénye nem mondja meg pontosan az objektum méretét. Nem adja vissza a generátor objektum méretét, mivel a Python nem tudja előre megmondani, hogy mekkora egy generátor. Ennek ellenére a valóságban visszaadja a memóriát elfoglaló objektum belső méretét (byte-ban).

Ennek megértéséhez nézzük meg a következő példaprogramot egy végtelen generátor objektummal.

1. példa: Nézze meg a következő Python programot:

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

Kimenet

 Internal memory size of endless generator object: 120 

Magyarázat:

Egy alapértelmezett függvényt, azaz az endlessGenerator() használtunk egy végtelen generátor objektum létrehozására a programban. A függvényben inicializáltunk egy változót, azaz counting = 0. A számláló változón while ciklust használtunk anélkül, hogy töréspontot adtunk volna a cikluson. Azáltal, hogy a függvényben végtelen hurkot hoztunk létre, az alapértelmezett függvényt végtelen generátor objektummá tesszük. Végül kinyomtattuk a végtelenített generátor objektum belső memória méretét a __sizeof__() függvény segítségével.

Most már világosan megértjük a __sizeof__() függvény működését. Mivel a fenti programban a végtelen generátor objektumnak nincs vége vagy töréspontja, a Python nem tudja előre megmondani a generátor méretét. Ugyanakkor ellenőrizhetjük a generátor objektum számára kiosztott belső memória méretét a __sizeof__() függvény segítségével, mivel a Pythonban bizonyos belső memóriát kell elfoglalnia.

Nézzünk még egy példát, ahol a __sizeof__() függvényt használjuk, hogy a belső memória méretét többletköltség nélkül megkapjuk.

2. példa:

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

Kimenet

 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 

Magyarázat:

A __sizeof__() függvény használatával jól láthatjuk, hogy egy üres lista belső memória mérete 40 bájt, és a listában lévő minden elem 8 bájttal növeli a lista teljes memóriaméretét.