Python Tuple (Demet) Yapısı

Python tuple yapısını, listelerden farklarını ve ne zaman tercih edilmesi gerektiğini öğrenin.

Harika bir soru! Python'daki `tuple` (demet) ve `list` (liste) veri yapıları birbirine çok benzer görünseler de, temel bir farkları vardır ve bu fark kullanım senaryolarını belirler. --- ### Python Tuple (Demet) Nedir? Bir **tuple**, Python'da **sıralı** ve **değiştirilemez (immutable)** bir eleman koleksiyonudur. Listeler gibi, tuple'lar da farklı veri tiplerindeki elemanları içerebilir ve indeksler aracılığıyla elemanlara erişilebilir. **Temel Özellikleri:** 1. **Sıralı (Ordered):** Elemanların eklenme sırası korunur. Yani, 0. indeks her zaman ilk elemanı, 1. indeks ikinci elemanı vb. gösterir. 2. **Değiştirilemez (Immutable):** Bu, tuple'ın en önemli özelliğidir. Bir tuple oluşturulduktan sonra, içindeki elemanlar değiştirilemez, eklenemez veya silinemez. Tuple'ın boyutu sabittir. 3. **Farklı Veri Tipleri İçerebilir:** Bir tuple, aynı veya farklı veri tiplerindeki (int, float, string, hatta başka listeler veya tuple'lar) elemanları bir arada tutabilir. 4. **İndekslenebilir:** Elemanlarına indeks numaraları (0'dan başlayarak) veya dilimleme (slicing) ile erişilebilir. **Tuple Oluşturma:** Tuple'lar genellikle **parantezler `()`** kullanılarak oluşturulur. ```python # Boş bir tuple bos_tuple = () print(bos_tuple) # () # Tek elemanlı tuple (virgüle dikkat!) tek_elemanli_tuple = (1,) print(tek_elemanli_tuple) # (1,) # Virgülsüz yazılırsa bir int olarak algılanır: (1) -> 1 # Birden fazla elemanlı tuple my_tuple = ("elma", 1, 3.14, True) print(my_tuple) # ('elma', 1, 3.14, True) # Parantez kullanmadan da tuple oluşturulabilir (genellikle önerilmez ama mümkündür) my_tuple_2 = "muz", 2, False print(my_tuple_2) # ('muz', 2, False) # Tuple'a erişim print(my_tuple[0]) # elma print(my_tuple[2]) # 3.14 print(my_tuple[-1]) # True # Tuple'ı değiştirmeye çalışmak hata verir # my_tuple[0] = "kiraz" # TypeError: 'tuple' object does not support item assignment ``` --- ### Tuple ve Liste Arasındaki Temel Farklar En temel fark **değiştirilebilirlik (mutability)** özelliğidir. 1. **Değiştirilebilirlik (Mutability):** * **Liste:** **Değiştirilebilirdir (Mutable).** Bir liste oluşturulduktan sonra, elemanları eklenebilir, silinebilir, değiştirilebilir ve yeniden sıralanabilir. * **Tuple:** **Değiştirilemezdir (Immutable).** Bir tuple oluşturulduktan sonra, içeriği (elemanları, sırası, boyutu) değiştirilemez. ```python # Liste örneği my_list = [1, 2, 3] my_list.append(4) # Eleman ekleme my_list[0] = 10 # Eleman değiştirme print(my_list) # [10, 2, 3, 4] -> Değişti! # Tuple örneği my_tuple = (1, 2, 3) # my_tuple.append(4) # AttributeError: 'tuple' object has no attribute 'append' # my_tuple[0] = 10 # TypeError: 'tuple' object does not support item assignment print(my_tuple) # (1, 2, 3) -> Değişmedi! ``` 2. **Sözdizimi (Syntax):** * **Liste:** Köşeli parantezler `[]` kullanır. * **Tuple:** Parantezler `()` kullanır. 3. **Kullanım Amacı ve Senaryoları:** * **Liste:** Verilerin sık sık değiştiği, dinamik koleksiyonlar için idealdir (örneğin, bir kullanıcının sepetindeki ürünler, bir görev listesi). * **Tuple:** Değişmez verilerin saklanması için kullanılır. Özellikle fonksiyonlardan birden fazla değer döndürmek, bir kaydın (record) değişmez alanlarını saklamak (örneğin, bir koordinat çifti `(x, y)`, bir tarih `(yıl, ay, gün)` gibi) veya sözlük anahtarları olarak kullanılmak istendiğinde tercih edilir. 4. **Performans:** * Tuple'lar, değiştirilemez oldukları için listelere göre biraz daha hızlı olabilir ve daha az bellek kullanabilirler. Ancak bu fark, genellikle çok büyük veri setleriyle veya yüksek performans gerektiren uygulamalarda fark edilir hale gelir. 5. **Hash Edilebilirlik (Hashability):** * **Tuple:** Eğer tuple'ın tüm elemanları da hash edilebilir ise, tuple'ın kendisi de hash edilebilir (örneğin, sözlük anahtarı olarak kullanılabilir veya bir kümenin elemanı olabilir). Sayılar, stringler gibi temel tipler hash edilebilir. * **Liste:** Listeler değiştirilebilir olduğu için hash edilemezler. Bu yüzden bir liste, sözlük anahtarı veya bir kümenin elemanı olamaz. ```python # Tuple'ı sözlük anahtarı olarak kullanma coordinates = {(40.71, -74.00): "New York", (34.05, -118.24): "Los Angeles"} print(coordinates[(40.71, -74.00)]) # New York # Listeyi sözlük anahtarı olarak kullanma (Hata verir) # my_dict = {[1, 2]: "value"} # TypeError: unhashable type: 'list' ``` --- ### Ne Zaman Hangisini Kullanmalıyız? * **Listeyi Kullanın:** * Koleksiyonunuzdaki elemanların eklenmesi, çıkarılması veya değiştirilmesi gerekiyorsa. * Dinamik bir veri yapısına ihtiyacınız varsa. * Örnekler: Bir ürün sepeti, bir öğrenci not listesi, bir dosya yolu listesi. * **Tuple'ı Kullanın:** * Verinin değişmez (sabit) kalmasını istediğinizde. * Fonksiyonlardan birden fazla değer döndürdüğünüzde (Python varsayılan olarak tuple döndürür). * Verileri bir kayıt veya sabit bir yapı olarak grupladığınızda (örneğin, RGB renk kodu `(255, 0, 0)`). * Veriyi bir sözlük anahtarı veya bir küme elemanı olarak kullanmak istediğinizde. * Örnekler: Bir şehrin coğrafi koordinatları `(enlem, boylam)`, bir veritabanından çekilen sabit bir kaydın başlıkları. --- Özetle, `tuple` ve `list` arasındaki temel ayrım **değiştirilebilirlik** özelliğidir. Bu fark, performans, bellek kullanımı ve belirli programlama senaryolarında (özellikle hash edilebilirlik) önemli sonuçlar doğurur. Hangi veri yapısını kullanacağınız, verilerinizin doğasına ve uygulamanızın gereksinimlerine bağlıdır.
Son Paylaşımlar
Kategoriler