Jump to content
  • entries
    33
  • comments
    0
  • views
    1,227

Kompakt Dizi Türleri


Doğuhan ELMA

51 views

Python'da, listelerin yanı sıra, daha verimli bellek kullanımına izin veren kompakt dizi türleri de mevcuttur. Bu dizi türleri, array modülü kullanılarak oluşturulabilir ve tüm elemanları aynı türden olan (örneğin tüm elemanlarının sayısal olduğu) bir dizi oluşturur.

array modülündeki array tipi, tüm elemanları aynı türde olan homojen bir dizi sunar. Bu, liste tipinden farklıdır çünkü listeler heterojen olabilir - yani, bir liste farklı türden elemanları içerebilir.

Bir array oluştururken, bir tür kodu belirtmeniz gereklidir. Bu kod, dizideki tüm elemanların hangi türde olacağını belirtir. Örneğin, 'i' tür kodu tam sayıları, 'f' tür kodu floatları temsil eder.

Kompakt bir dizi oluşturmanın bir örneği aşağıda verilmiştir:

import array
a = array.array('i', [1, 2, 3, 4, 5])

Bu kod, tam sayıları ('i') içeren bir dizi oluşturur.

1.png

Kompakt diziler, belleği daha verimli bir şekilde kullanır çünkü aynı türden elemanlar için yer ayırır. Ancak bu, dizinin sadece belirli bir türdeki elemanları içerebileceği anlamına gelir.

Kompakt dizilerin bilgi işlem performansı açısından referans yapılara göre çeşitli avantajları vardır. En önemlisi, genel bellek kullanımı, kompakt bir yapı için çok daha düşük olacaktır çünkü (birincil verilere ek olarak) bellek referansları dizisinin açık depolanmasına ayrılmış bir ek yük yoktur. Yani, bir referans yapısı, öğe olarak kabul edilen nesneyi temsil etmek için kullanılan bit sayısına ek olarak, dizide depolanan bellek adresi için tipik olarak 64 bit kullanacaktır. Ayrıca, bir dizge içindeki küçük bir dizide saklanan her bir Unicode karakteri tipik olarak 2 bayt gerektirir. Her karakter bağımsız olarak tek karakterlik bir dizi olarak depolansaydı, önemli ölçüde daha fazla bayt kullanılırdı. Başka bir vaka çalışması olarak, bir milyon 64 bit tam sayıdan oluşan bir diziyi depolamak istediğimizi varsayalım. Teorik olarak, sadece 64 milyon bit kullanmayı umabiliriz.

Ancak, bir Python listesinin dört ila beş kat daha fazla bellek kullanacağını tahmin ediyoruz. Listenin her öğesi, birincil dizide 64 bitlik bir bellek adresinin ve belleğin başka bir yerinde bir int örneğinin depolanmasıyla sonuçlanacaktır. Python, herhangi bir nesnenin birincil depolaması için kullanılan gerçek bayt sayısını sorgulamanıza izin verir. Bu, sys modülünün getsizeof işlevi kullanılarak yapılır. Sistemimizde, tipik bir int nesnesinin boyutu 14 bayt bellek gerektirir (gerçek 64 bitlik sayıyı temsil etmek için gereken 4 baytın çok ötesinde). Toplamda, liste, kompakt bir tamsayı listesinin gerektirdiği 4 bayt yerine giriş başına 18 bayt kullanacaktır. Yüksek performanslı bilgi işlem için kompakt yapının bir diğer önemli avantajı, birincil verilerin ardışık olarak bellekte saklanmasıdır. Bunun bir referans yapısı için geçerli olmadığına dikkat edin. Yani, bir liste, bellek adresleri dizisinin dikkatli bir şekilde sıralanmasını sağlasa da, bu öğelerin bellekte nerede bulunduğu liste tarafından belirlenmez. Bilgisayarların önbellek ve bellek hiyerarşilerinin işleyişi nedeniyle, verilerin aynı hesaplamalarda kullanılabilecek diğer verilerin yanında bellekte saklanması genellikle avantajlıdır. Referans yapılarının bariz verimsizliklerine rağmen, Python listelerinin ve demetlerinin rahatlığıyla genel olarak yetineceğiz. 

 

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...