DEV Community

Vebende Akademi
Vebende Akademi

Posted on

Python Tuple (Demet) Veri Yapısı: Sıfırdan İleri Seviyeye Kapsamlı Rehber

Python Tuple (Demet) Veri Yapısı: Sıfırdan İleri Seviyeye Kapsamlı Rehber

Python'da veri saklamak için kullanılan temel veri yapılarından biri de Tuple (Demet) yapısıdır. İlk bakışta listelere çok benzese de Tuple'ların çok önemli bir farkı vardır:

Tuple oluşturulduktan sonra değiştirilemez (Immutable).

Bu özellik sayesinde Tuple'lar:

  • Daha hızlı çalışır
  • Daha az bellek tüketir
  • Veri bütünlüğünü korur
  • Dictionary anahtarı olarak kullanılabilir
  • Büyük veri işleme uygulamalarında performans avantajı sağlar

Gerçek hayatta:

  • GPS koordinatları
  • Veritabanı kayıtları
  • API dönüşleri
  • Konfigürasyon bilgileri
  • RGB renk tanımları
  • Matematiksel koordinatlar

gibi değişmemesi gereken veriler çoğunlukla Tuple ile temsil edilir.


Tuple Nedir?

Birden fazla veriyi tek değişken altında saklayan ancak oluşturulduktan sonra değiştirilemeyen veri yapısıdır.

koordinat = (40.9876, 29.1234)

print(koordinat)
Enter fullscreen mode Exit fullscreen mode

Çıktı:

(40.9876, 29.1234)
Enter fullscreen mode Exit fullscreen mode

Liste ve Tuple Arasındaki Fark

Liste:

liste = [1, 2, 3]
Enter fullscreen mode Exit fullscreen mode

Tuple:

tuple_veri = (1, 2, 3)
Enter fullscreen mode Exit fullscreen mode

Liste değiştirilebilir.

liste[0] = 100
Enter fullscreen mode Exit fullscreen mode

Tuple değiştirilemez.

tuple_veri[0] = 100
Enter fullscreen mode Exit fullscreen mode

Hata:

TypeError:
'tuple' object does not support item assignment
Enter fullscreen mode Exit fullscreen mode

Tuple Oluşturma

Temel Kullanım

personel = (
    1001,
    "Ali",
    "Yazılım Uzmanı"
)

print(personel)
Enter fullscreen mode Exit fullscreen mode

Farklı Veri Tipleri

veri = (
    "Python",
    3.14,
    42,
    True
)

print(veri)
Enter fullscreen mode Exit fullscreen mode

Boş Tuple

bos = ()
Enter fullscreen mode Exit fullscreen mode

Tek Elemanlı Tuple

En sık yapılan hata budur.

Yanlış:

x = (5)

print(type(x))
Enter fullscreen mode Exit fullscreen mode

Çıktı:

<class 'int'>
Enter fullscreen mode Exit fullscreen mode

Doğru:

x = (5,)

print(type(x))
Enter fullscreen mode Exit fullscreen mode

Çıktı:

<class 'tuple'>
Enter fullscreen mode Exit fullscreen mode

Tuple Elemanlarına Erişim

meyveler = (
    "Elma",
    "Armut",
    "Muz"
)

print(meyveler[0])
print(meyveler[1])
Enter fullscreen mode Exit fullscreen mode

Çıktı:

Elma
Armut
Enter fullscreen mode Exit fullscreen mode

Negatif İndeksler

meyveler = (
    "Elma",
    "Armut",
    "Muz"
)

print(meyveler[-1])
Enter fullscreen mode Exit fullscreen mode

Çıktı:

Muz
Enter fullscreen mode Exit fullscreen mode

Tuple Uzunluğu

veriler = (
    10,
    20,
    30,
    40
)

print(len(veriler))
Enter fullscreen mode Exit fullscreen mode

Çıktı:

4
Enter fullscreen mode Exit fullscreen mode

Tuple Üzerinde Döngü

renkler = (
    "Kırmızı",
    "Mavi",
    "Yeşil"
)

for renk in renkler:
    print(renk)
Enter fullscreen mode Exit fullscreen mode

Tuple Dilimleme (Slicing)

sayilar = (
    10,
    20,
    30,
    40,
    50
)

print(sayilar[1:4])
Enter fullscreen mode Exit fullscreen mode

Çıktı:

(20, 30, 40)
Enter fullscreen mode Exit fullscreen mode

Tuple Birleştirme

a = (1, 2, 3)
b = (4, 5, 6)

c = a + b

print(c)
Enter fullscreen mode Exit fullscreen mode

Çıktı:

(1, 2, 3, 4, 5, 6)
Enter fullscreen mode Exit fullscreen mode

Tuple Çoğaltma

sayilar = (1, 2, 3)

print(sayilar * 3)
Enter fullscreen mode Exit fullscreen mode

Çıktı:

(1, 2, 3, 1, 2, 3, 1, 2, 3)
Enter fullscreen mode Exit fullscreen mode

Tuple İçinde Arama

in Operatörü

renkler = (
    "Kırmızı",
    "Mavi",
    "Yeşil"
)

print("Mavi" in renkler)
Enter fullscreen mode Exit fullscreen mode

Çıktı:

True
Enter fullscreen mode Exit fullscreen mode

index()

renkler = (
    "Kırmızı",
    "Mavi",
    "Yeşil"
)

print(
    renkler.index("Mavi")
)
Enter fullscreen mode Exit fullscreen mode

Çıktı:

1
Enter fullscreen mode Exit fullscreen mode

count()

sayilar = (
    1,
    2,
    2,
    3,
    2
)

print(
    sayilar.count(2)
)
Enter fullscreen mode Exit fullscreen mode

Çıktı:

3
Enter fullscreen mode Exit fullscreen mode

Tuple Packing

Python'ın en güçlü özelliklerinden biridir.

personel = (
    1001,
    "Ali",
    75000
)
Enter fullscreen mode Exit fullscreen mode

Aslında Python bunu şöyle yorumlar:

personel = 1001, "Ali", 75000
Enter fullscreen mode Exit fullscreen mode

Tuple Unpacking

id,
isim,
maas = personel

print(id)
print(isim)
print(maas)
Enter fullscreen mode Exit fullscreen mode

Çıktı:

1001
Ali
75000
Enter fullscreen mode Exit fullscreen mode

Hands-On 1: Koordinat Sistemi

istanbul = (
    41.0082,
    28.9784
)

print(
    "Enlem:",
    istanbul[0]
)

print(
    "Boylam:",
    istanbul[1]
)
Enter fullscreen mode Exit fullscreen mode

Hands-On 2: RGB Renk Sistemi

mavi = (
    0,
    0,
    255
)

print(
    f"R:{mavi[0]}"
)

print(
    f"G:{mavi[1]}"
)

print(
    f"B:{mavi[2]}"
)
Enter fullscreen mode Exit fullscreen mode

Hands-On 3: Veritabanı Kaydı

kayit = (
    1001,
    "Ali",
    "Yazılım Uzmanı",
    85000
)

id,
isim,
gorev,
maas = kayit

print(
    f"{isim} - {maas}"
)
Enter fullscreen mode Exit fullscreen mode

Hands-On 4: Çoklu Değer Döndürme

Fonksiyonlardan çok sık kullanılır.

def hesapla(a, b):

    toplam = a + b
    fark = a - b

    return (
        toplam,
        fark
    )

sonuc = hesapla(20, 10)

print(sonuc)
Enter fullscreen mode Exit fullscreen mode

Çıktı:

(30, 10)
Enter fullscreen mode Exit fullscreen mode

Hands-On 5: Sonucu Parçalamak

toplam,
fark = hesapla(20, 10)

print(toplam)
print(fark)
Enter fullscreen mode Exit fullscreen mode

Swap (Yer Değiştirme)

Python'ın ünlü özelliği.

C#'ta:

int temp = a;
a = b;
b = temp;
Enter fullscreen mode Exit fullscreen mode

Python'da:

a = 10
b = 20

a, b = b, a

print(a, b)
Enter fullscreen mode Exit fullscreen mode

Çıktı:

20 10
Enter fullscreen mode Exit fullscreen mode

İç İçe Tuple

matris = (
    (1, 2, 3),
    (4, 5, 6),
    (7, 8, 9)
)

print(
    matris[1][2]
)
Enter fullscreen mode Exit fullscreen mode

Çıktı:

6
Enter fullscreen mode Exit fullscreen mode

Liste İçinde Tuple

Çok yaygındır.

personeller = [
    (1, "Ali"),
    (2, "Ayşe"),
    (3, "Mehmet")
]

for id, isim in personeller:
    print(id, isim)
Enter fullscreen mode Exit fullscreen mode

Tuple İçinde Liste

Dikkat edilmesi gereken önemli bir konu.

veri = (
    1,
    2,
    [3, 4]
)

veri[2].append(5)

print(veri)
Enter fullscreen mode Exit fullscreen mode

Çıktı:

(1, 2, [3, 4, 5])
Enter fullscreen mode Exit fullscreen mode

Tuple değişmezdir ancak içindeki mutable nesneler değişebilir.


NamedTuple

Daha okunabilir tuple yapıları oluşturur.

from collections import namedtuple

Personel = namedtuple(
    "Personel",
    [
        "id",
        "isim",
        "maas"
    ]
)

p = Personel(
    1,
    "Ali",
    75000
)

print(p.isim)
Enter fullscreen mode Exit fullscreen mode

Çıktı:

Ali
Enter fullscreen mode Exit fullscreen mode

Hands-On 6: NamedTuple ile Personel Sistemi

from collections import namedtuple

Personel = namedtuple(
    "Personel",
    [
        "id",
        "isim",
        "departman"
    ]
)

personeller = [
    Personel(
        1,
        "Ali",
        "Yazılım"
    ),
    Personel(
        2,
        "Ayşe",
        "Muhasebe"
    )
]

for p in personeller:
    print(
        p.isim,
        p.departman
    )
Enter fullscreen mode Exit fullscreen mode

Tuple ve Set İlişkisi

Tuple hashlenebilir olduğu için Set içinde kullanılabilir.

koordinatlar = {
    (40.1, 29.1),
    (40.2, 29.2),
    (40.3, 29.3)
}

print(koordinatlar)
Enter fullscreen mode Exit fullscreen mode

Tuple Dictionary Anahtarı Olarak Kullanmak

sicaklik = {
    ("İzmir", "Ocak"): 12,
    ("İzmir", "Şubat"): 13,
    ("İzmir", "Mart"): 17
}

print(
    sicaklik[
        ("İzmir", "Mart")
    ]
)
Enter fullscreen mode Exit fullscreen mode

Çıktı:

17
Enter fullscreen mode Exit fullscreen mode

Performans Karşılaştırması

Bellek Kullanımı

import sys

liste = [1, 2, 3, 4, 5]
tuple_veri = (1, 2, 3, 4, 5)

print(
    sys.getsizeof(liste)
)

print(
    sys.getsizeof(tuple_veri)
)
Enter fullscreen mode Exit fullscreen mode

Tuple daha az bellek kullanır.


Büyük Veri Performansı

import timeit

liste = [x for x in range(1000)]
tuple_veri = tuple(range(1000))

print(
    timeit.timeit(
        lambda: liste[500],
        number=1000000
    )
)

print(
    timeit.timeit(
        lambda: tuple_veri[500],
        number=1000000
    )
)
Enter fullscreen mode Exit fullscreen mode

Tuple genellikle biraz daha hızlıdır.


Gerçek Hayat Kullanım Senaryoları

Tuple kullanın:

  • GPS koordinatları
  • RGB renkleri
  • Tarih bilgileri
  • Sabit konfigürasyonlar
  • Fonksiyon dönüşleri
  • Veritabanı kayıtları
  • Cache anahtarları

Liste kullanın:

  • Veri değişecekse
  • Eleman eklenecekse
  • Silme işlemleri yapılacaksa

Python ve C# Karşılaştırması

Python

personel = (
    1,
    "Ali",
    75000
)
Enter fullscreen mode Exit fullscreen mode

C

var personel =
(
    1,
    "Ali",
    75000m
);

Console.WriteLine(
    personel.Item2
);
Enter fullscreen mode Exit fullscreen mode

İleri Seviye Hands-On: Satış Analizi

satislar = [
    ("Laptop", 45000),
    ("Mouse", 500),
    ("Laptop", 45000),
    ("Monitör", 12000),
    ("Mouse", 500)
]

toplam = {}

for urun, fiyat in satislar:

    toplam[urun] = (
        toplam.get(
            urun,
            0
        )
        + fiyat
    )

print(toplam)
Enter fullscreen mode Exit fullscreen mode

Çıktı:

{
 'Laptop':90000,
 'Mouse':1000,
 'Monitör':12000
}
Enter fullscreen mode Exit fullscreen mode

Özet

Tuple, Python'ın en önemli veri yapılarından biridir ve özellikle değişmemesi gereken verileri saklamak için tasarlanmıştır.

İyi bir Python geliştiricisi;

  • Tuple oluşturmayı
  • Packing ve Unpacking işlemlerini
  • Çoklu dönüş değerlerini
  • NamedTuple kullanımını
  • Tuple ile performans avantajlarını
  • Dictionary anahtarı olarak kullanımını
  • Veri modelleme tekniklerini

çok iyi seviyede bilmelidir.

Özellikle veri analizi, yapay zeka, API geliştirme, büyük veri sistemleri ve yüksek performanslı uygulamalarda Tuple kullanımı kodun hem daha güvenilir hem de daha verimli çalışmasını sağlar. Python ekosistemindeki birçok kütüphane, veri aktarımı ve fonksiyon dönüşlerinde Tuple yapısını yoğun olarak kullanmaktadır.

Top comments (0)