logo

Python'da sizeof

Büyük komut dosyaları veya çok satırlı kodlar yazarken bellek yönetimi en büyük önceliğimiz olmalıdır. Bu nedenle iyi programlama bilgisinin yanı sıra belleği verimli kullanma konusunda da iyi bilgiye sahip olmamız gerekir. Programda bulunan belirli bir nesnenin hafızasındaki boyutunu elde etmek için Python'da verilen birçok fonksiyonumuz vardır ve bu fonksiyonlardan biri __sizeof__()'dır. Bu derste __sizeof__() fonksiyonunu ve onun bir Python programında çalışmasını öğreneceğiz.

Python __sizeof__() işlevi

Python'daki __sizeof__() işlevi bize nesnenin boyutunu tam olarak söylemez. Python bize bir jeneratörün boyutunun ne kadar olduğunu önceden söyleyemediğinden, bir jeneratör nesnesinin boyutunu döndürmez. Yine de gerçekte, hafızayı işgal eden belirli bir nesnenin (bayt cinsinden) iç boyutunu döndürür.

Bunu anlamak için sonsuz bir jeneratör nesnesi içeren aşağıdaki örnek programa bakalım.

Örnek 1: Aşağıdaki Python programına bakın:

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

Çıktı

java lambda örneği
 Internal memory size of endless generator object: 120 

Açıklama:

Programda sonsuz bir üreteç nesnesi oluşturmak için, sonsuzGenerator() gibi varsayılan bir işlevi kullandık. Fonksiyonda bir değişkeni başlattık yani sayma = 0. Döngüde kesme noktası vermeden sayma değişkeni üzerinde while döngüsü kullandık. Fonksiyonda sonsuz bir döngü oluşturarak varsayılan fonksiyonu sonsuz bir jeneratör nesnesi haline getirdik. Son olarak __sizeof__() fonksiyonunu kullanarak sonsuz üreteç nesnesinin dahili hafıza boyutunu yazdırdık.

excel'de görev süresi hesaplama

Artık __sizeof__() fonksiyonunun işleyişini net bir şekilde anlayabiliyoruz. Yukarıdaki programdaki sonsuz jeneratör nesnesinin herhangi bir sonu veya kesme noktası olmadığından Python bize jeneratörün boyutunu önceden söyleyemez. Ancak aynı zamanda, Python'da bir miktar dahili hafıza kaplıyor olması gerektiğinden, __sizeof__() fonksiyonu ile jeneratör nesnesine ayrılan dahili hafıza boyutunu kontrol edebiliriz.

Herhangi bir ek yük olmadan dahili bellek boyutunu elde etmek için __sizeof__() işlevini kullandığımız bir örneğe daha bakalım.

Örnek 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__()) 

Çıktı

 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 

Açıklama:

__sizeof__() fonksiyonunu kullanarak boş bir listenin dahili hafıza boyutunun 40 bayt olduğunu ve listede bulunan her elemanın listenin toplam hafıza boyutuna 8 baytlık bir boyut eklediğini açıkça görebiliriz.