Když píšeme velké skripty nebo kód o mnoha řádcích, správa paměti by měla být naší nejvyšší prioritou. Proto bychom měli mít kromě dobrých znalostí programování také dobré znalosti o efektivním zacházení s pamětí. V Pythonu máme mnoho funkcí pro získání velikosti konkrétního objektu přítomného v programu v paměti a jednou z takových funkcí je __sizeof__(). V tomto tutoriálu se seznámíme s funkcí __sizeof__() a její prací v programu Python.
Funkce Python __sizeof__().
Funkce __sizeof__() v Pythonu nám přesně neříká velikost objektu. Nevrací velikost objektu generátoru, protože Python nám nemůže předem říci, jak velká je velikost generátoru. Ve skutečnosti však vrací vnitřní velikost konkrétního objektu (v bajtech), který zabírá paměť.
Abychom to pochopili, podívejme se na následující příklad programu s objektem nekonečného generátoru.
Příklad 1: Podívejte se na následující 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__())
Výstup
Internal memory size of endless generator object: 120
Vysvětlení:
K vytvoření objektu nekonečného generátoru v programu jsme použili výchozí funkci, tj. endlessGenerator(). Ve funkci jsme inicializovali proměnnou, tj. počítání = 0. Použili jsme smyčku while na počítací proměnné, aniž bychom u smyčky dali bod přerušení. Vytvořením nekonečné smyčky ve funkci jsme vytvořili výchozí funkci jako objekt nekonečného generátoru. Nakonec jsme pomocí funkce __sizeof__() vytiskli velikost vnitřní paměti objektu nekonečného generátoru.
mini panel nástrojů excel
Nyní můžeme jasně pochopit fungování funkce __sizeof__(). Protože objekt nekonečného generátoru ve výše uvedeném programu nemá žádný konec ani bod přerušení, Python nám nemůže předem sdělit velikost generátoru. Ale zároveň můžeme zkontrolovat velikost vnitřní paměti přidělené objektu generátoru funkcí __sizeof__(), protože musí zabírat nějakou vnitřní paměť v Pythonu.
Podívejme se ještě na jeden příklad, kdy pomocí funkce __sizeof__() získáme velikost vnitřní paměti bez jakékoli režie.
Příklad 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__())
Výstup
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
Vysvětlení:
Pomocí funkce __sizeof__() můžeme jasně vidět, že velikost vnitřní paměti prázdného seznamu je 40 bajtů a každý prvek přítomný v seznamu přidá velikost 8 bajtů k celkové velikosti paměti seznamu.