Python'daki Diziler Açıklandı!
Programlamaya başlıyorsanız veya Python'u öğreniyorsanız, bu makale tam size göre, diziler en çok kullanılan veri yapılarından biridir. Python dizileri nasıl temsil eder? Farklı sorunları çözmek için Python'daki dizileri nasıl değiştirebiliriz? Bu makalede öğreneceğimiz şey bu.
Bilgisayarlar Bilgileri Nasıl Depolar?
Bildiğiniz gibi, bir bilgisayardaki en birincil bilgi biçimi bilgi parçalarından oluşur. Bu bilgilerin 8 biti daha sonra bayt dediğimiz şeyi oluşturmak için gruplandırılır .
Bilgisayarlar bu baytların çok büyük parçalarını depolayabildikleri için, baytları hızlı bir şekilde okumalarını ve yazmalarını sağlayan yeni bir mekanizmaya ihtiyaç duyarlar ; tıpkı kişisel ev adresinizin yaşadığınız yeri komşunuzdan farklı kıldığı gibi, bellek adreslerinin devreye girdiği yer burasıdır. bilgisayar, farklı veri ve bilgi parçalarının nerede yaşadığını ayırt etmek için bellek adreslerini kullanır.
Bilgisayarın herhangi bir bellek adresine ulaşmasının O(1) erişim süresi aldığını da belirtmekte fayda var, bu, #5489637 baytına erişmenin #64 baytına erişimle aynı olduğu anlamına gelir.
Diziler Nedir?
Programlama dillerinde yaygın bir uygulama, bellekteki bir adrese atıfta bulunmak için değişkenleri kullanmaktır, örneğin X tanımlayıcısı #32 baytına atıfta bulunabilir.
Birden çok bellek adresi depolamak istememiz durumunda, birden çok tanımlayıcı oluşturmak verimli ve ölçeklenebilir değildir. Tanımlayıcı grubu için bir adımız olsaydı ve belirli tanımlayıcılara erişmek için sayıları kullanırsak daha fazlasını tercih ederdik. Bu tür bir temsil bir dizidir, başka bir deyişle bilgisayar belleğinin bitişik bir bölümündeki bir grup değişkenin temsilidir.
Örneğin Python'daki dizeler bu şekilde saklanır, diyelim ki 'example' metniyle Python'un tahsis edeceği yeni bir değişken bildirdiniz:
2 bayt (bir Unicode karakterini depolamak için gereken bellek) * 7 (kelime örneğindeki karakter sayısı) = bu değişkeni depolamak için 14 bayt bitişik bellek.
Referans Dizileri
Python, referans dizileri olan başka bir dizi türü kullanır, bunları anlamak için bu örneğe bir göz atalım, diyelim ki bir oteliniz var ve 50 odanız var, kimin hangi odada kaldığını saklamak için bir yola ihtiyacınız var. aşağıdaki gibi bir gösterim:
bunu yapmak için Python'un ayrılacak bitişik bellek alanı durumuna saygı göstermesi gerekir. Ancak adlar farklı uzunluklarda olduğunda (farklı uzunluklar, farklı alan gereksinimleri anlamına gelir) bunu nasıl yapar?
Bir çözüm, en büyük dizinin uzunluğunu bulmak ve hepsi için yeterli bellek alanı ayırmak olabilir, ancak bu, bellek açısından verimli olmayacaktır çünkü bir miktar alan boşa harcanacaktır ve ya şimdi en büyük dizi olan yeni bir dizi gelirse?
Bunu çözmek için Python, birden çok nesneye bitişik referanslar dizisi oluşturur , bu nedenle artık her bir nesnenin boyutu değişse bile, bellek adresini depolamak için kullanılan bellek aynıdır. Bu şekilde Python, dizinin farklı öğelerine sürekli erişim süresini garanti eder. Bu tür dizilere referans dizisi diyoruz .
Bunu göstermek için şu resme bir göz atın:
Python'daki Listeler ve Demetler, verileri depolamak için bu tür dizileri kullanır.
Not: Referans dizileri referanslara işaret ettiğinden, yanlışlıkla Listelerdeki değerleri de değiştirebileceğiniz için referans değerlerini değiştirirken dikkatli olun. Ayrıca kopya oluştururken, Sığ ve Derin kopya arasındaki farkı bildiğinizden emin olun .
Kompakt Diziler
Daha önce Dizelerden ve bunları bir dizi bitişik bellekte nasıl sakladığımızdan bahsetmiştik, aslında bu diziye Kompakt Dizi diyoruz.
Referans dizilere göre kompakt diziler kullanmanın bir avantajı, bellek referanslarını depolamaktan kaynaklanan fazladan bir ek yükün olmamasıdır, birincil verileri doğrudan depolarız. Bahsetmeye değer başka bir avantaj da, referans dizisi olan bir liste kullanılması durumunda, liste verilerin nerede olduğuna ilişkin referansları muhafaza etse de, Python'un verilerinizin nerede depolandığı konusunda hiçbir denetiminin olmamasıdır. Donanımın çalışma şekli nedeniyle, verilerinizin birbirine yakın olması daha verimlidir, aynı hesaplama için kullanılabilir.
Bu avantajlara rağmen, Listeler ve demetler için Python, kullanımları uygun olduğu için referans dizilerini kullanır. Ancak kompakt bir dizi kullanmakta ısrarcıysanız, Python size bunu yapmanıza izin veren dizi adı verilen bir modül sağlar:
i Burada ilk argüman olarak geçtiğimizi fark ettiniz array. Kompakt bir dizi oluşturmak için uygun bellek tahsisi için türü belirtmemiz gerektiğinden. Diğer veri türleri için bu tabloyu kontrol edin:
Dizi modülü hakkında daha fazla bilgi edinmek istiyorsanız buraya tıklayın .
Dizi modülünün bir dezavantajı, kullanıcı tanımlı veri türlerini desteklememesidir. Bu tür veri yapısına sahip kompakt diziler, ctypes modülü kullanılarak tanımlanabilir .
Dinamik Diziler
Kompakt bir dizi oluştururken, bilgisayarın hangi belleği ayıracağını bilmesi için o dizinin tam boyutunu belirtiriz. Çünkü komşu bellek alanını diğer dizilere ayırır.
Pratikte dizilerimizin boyutunu her zaman bilemeyiz, zamanla genişleyebilirler. Bu soruna çare olarak Python, Dinamik Dizi adı verilen bir soyutlama sağlar.
Bu soyutlama, gerçek listenin uzunluğundan daha fazla kapasiteye sahip temel bir diziyi koruyan bir liste örneğini kullanır. Bu ekstra kapasite, listeye daha fazla veri eklememize yardımcı olur.
Sonunda ekstra kapasiteyi tükettiğimizde, Dynamic Array daha büyük yeni bir dizi ister ve tüm öğeleri yeni diziye kopyalar ve sistem eski dizideki alanı geri alır.
Python Listesi bu soyutlamaya dayanmaktadır, ancak Demetler ve Dizeler değişmezdir (değiştirilemez), bu nedenle buna dayalı değildir.
Ayrıca, dinamik dizinin yalnızca boyut olarak genişlemediğini, aynı zamanda listeden öğeleri silersek küçülebileceğini de belirtmekte fayda var.
Listeler ve Demetler
Dolayısıyla, yukarıdaki bölümde yaptığımız analizden, Lists & Tuples yöntemlerini iki tür yönteme ayırabiliriz:
Değişmeyen yöntemler: Hem demetlerde hem de listelerde bulunan ve içeriklerini değiştirmeyen yöntemler. Aşağıda bu yöntemlerin ve zaman karmaşıklıklarının bir tablosu bulunmaktadır:
Mutasyon yöntemleri: listenin temel verilerini ve yapısını değiştirdikçe yalnızca listelerde bulunan yöntemler. Aşağıda bu yöntemlerin ve zaman karmaşıklıklarının bir tablosu bulunmaktadır:
Burada her bir yöntemin ne işe yaradığını tartışmadık (Sezgisel ve kolaydır), ancak Python listeleri ve demetleri hakkında daha fazla bilgi edinebilirsiniz .
paketler
- Referans dizileri, referansları dizi hafızasında saklar ve ardından referanslar aracılığıyla gerçek değerlere erişir.
- Kompakt diziler, gerçek verileri bitişik bir bellekte depolar.
- Dinamik diziler, içindeki eleman sayısına bağlı olarak otomatik olarak genişleyen ve küçülen dizilerdir.
- Listeler referans ve dinamik dizilere dayalıdır.
- Demetler, referans dizilerini temel alır.
- Dize, kompakt dizileri temel alır.
Linkedin:https://www.linkedin.com/in/mohamed-aziz-belaweid/
GitHub'da:https://github.com/azayz
Diğer hikayelerimi okuyun:
REALM: Geri Alma Artırılmış Dil Modeli Ön Eğitim Yüzde Duygu Tanıma, Uygulamalı kılavuz!Abone ol ve ne zaman bir şey eklesem bildirim al:

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































