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
-
Python Temelleri Genel Tekrar
14:39:24 - 13/12/2025 -
Python Performans İpuçları
14:38:59 - 13/12/2025 -
Python’da Temiz Kod Yazma
14:38:28 - 13/12/2025 -
Python Mini Proje: Sayı Tahmin Oyunu
14:37:58 - 13/12/2025 -
Python Mini Proje: Hesap Makinesi
14:37:31 - 13/12/2025