Python'da Temel Veri Yapıları: Bellek Yönetimi ve Kullanım Senaryoları
Python'un gömülü (built-in) veri yapıları olan List, Tuple, Dictionary ve Set'in teknik özellikleri, zaman karmaşıklıkları (Big O) ve kod örnekleriyle kullanım senaryoları.
Yavuz Soylu

Bir uygulamanın performansı ve bellek tüketimi, seçilen veri yapısına (data structure) doğrudan bağlıdır. Python, arka planda C ile optimize edilmiş ve geliştiricilere yüksek seviyeli bir arayüz sunan dört temel gömülü veri yapısı barındırır: List, Tuple, Dictionary ve Set.
Bu yazıda, bu yapıların bellek üzerindeki davranışlarını, zaman karmaşıklıklarını (time complexity) ve kod seviyesindeki kullanımlarını inceleyeceğiz.
1. List (Listeler)
Python'daki listeler, dinamik boyutlu dizilerdir (dynamic arrays). Bellekte ardışık olarak tutulmazlar; bunun yerine elemanların bellek adreslerini (pointer) tutan bir referans dizisi olarak çalışırlar. Farklı veri tiplerini aynı anda barındırabilirler. Değiştirilebilir (mutable) yapılardır.
Zaman Karmaşıklığı: Listenin sonuna eleman eklemek (append) veya silmek (pop) ortalama O(1) maliyetliyken; listenin arasına eleman eklemek (insert) veya belirli bir elemanı aramak O(n) zaman alır.
Python
# Liste oluşturma
user_ids = [101, 102, 103, 104]
# Sona eleman ekleme - O(1)
user_ids.append(105)
# Araya eleman ekleme - O(n) (Diğer elemanlar sağa kaydırılır)
user_ids.insert(0, 100)
# Eleman güncelleme
user_ids[2] = 999
print(user_ids)
# Çıktı: [100, 101, 999, 103, 104, 105]
2. Tuple (Demetler)
Demetler, listelere çok benzer ancak değiştirilemez (immutable) yapılardır. Bir tuple oluşturulduktan sonra eleman eklenemez, silinemez veya güncellenemez.
Kullanım Senaryosu: Bu kısıtlama, tuple'ları bellek açısından listelerden daha hafif (memory-efficient) hale getirir. Fonksiyonlardan birden fazla değer döndürmek veya sabit kalması gereken konfigürasyon verilerini tutmak için idealdir. Dictionary'lerde anahtar (key) olarak kullanılabilirler (çünkü hash edilebilirler).
Python
# Tuple oluşturma
database_config = ("localhost", 5432, "admin_user")
# Elemanlara indeks ile erişim - O(1)
host = database_config[0]
port = database_config[1]
# Tuple unpacking (Paket açma)
db_host, db_port, db_user = database_config
# HATA: database_config[0] = "127.0.0.1" (TypeError fırlatır)
3. Dictionary (Sözlükler)
Sözlükler, anahtar-değer (key-value) çiftleri tutan ve arka planda Hash Table (Karma Tablosu) mimarisiyle çalışan veri yapılarıdır. Anahtarlar benzersiz ve değiştirilemez (hashable) olmak zorundadır (string, int, tuple gibi).
Zaman Karmaşıklığı: Hash fonksiyonu sayesinde bir anahtara değer atamak, değeri okumak veya silmek ortalama O(1) zaman karmaşıklığı ile gerçekleşir. Veri arama işlemlerinde listelere göre çok daha performanslıdır.
Python
# Sözlük oluşturma
server_status = {
"server_1": "online",
"server_2": "offline",
"cpu_usage": 45.5
}
# Yeni anahtar-değer ekleme - O(1)
server_status["server_3"] = "maintenance"
# Değer okuma (Eğer anahtar yoksa None döner, KeyError fırlatmaz)
status = server_status.get("server_2", "Not Found")
# Anahtarlar üzerinde gezinme
for key, value in server_status.items():
print(f"{key}: {value}")
4. Set (Kümeler)
Kümeler, yalnızca benzersiz (unique) elemanları barındıran, sırasız (unordered) veri yapılarıdır. Sözlükler gibi hash table altyapısını kullanırlar ancak sadece "anahtar" tutarlar, "değer" tutmazlar.
Kullanım Senaryosu: Bir veri kümesindeki tekrarlayan (duplicate) kayıtları temizlemek veya iki veri seti arasındaki matematiksel küme işlemlerini (kesişim, birleşim, fark) çok hızlı (O(1) veya O(n)) bir şekilde yapmak için kullanılır.
Python
# Set oluşturma (Tekrarlayan 2 değeri otomatik olarak teke düşer)
unique_ports = {80, 443, 8080, 80}
# Liste üzerinden tekrarlayan verileri temizleme
raw_ips = ["192.168.1.1", "10.0.0.5", "192.168.1.1"]
clean_ips = set(raw_ips)
# clean_ips artık {"192.168.1.1", "10.0.0.5"}
# Küme işlemleri
active_users = {"user_1", "user_2", "user_3"}
banned_users = {"user_3", "user_4"}
# Kesişim (Intersection): Hem aktif hem banlı olanlar
problematic_users = active_users.intersection(banned_users) # {"user_3"}
Ücretsiz Öğrenme ve Pratik Kaynakları
Veri yapılarını ve algoritmaları sadece okuyarak değil, kod yazarak pekiştirmek gerekir. Bu konuyu teorik ve pratik düzeyde ücretsiz olarak öğrenebileceğiniz kaynaklar şunlardır:
- Python Resmi Dokümantasyonu (Data Structures): Herhangi bir kütüphane veya araç öğrenilirken başvurulması gereken ilk yerdir. Arka plandaki çalışma mantığını en yalın haliyle anlatır.
- FreeCodeCamp - Algorithms and Data Structures in Python: YouTube üzerinde yer alan bu kapsamlı kurs, veri yapılarını görselleştirerek ve kodlayarak anlatır.
- NeetCode (Roadmap): Öğrenilen veri yapılarını pratik etmek için hazırlanmış ücretsiz bir algoritma yol haritasıdır. Array, Hashing ve Two Pointers gibi konuları sırasıyla çözerek pratiğinizi artırabilirsiniz.
- HackerRank - Python Data Structures: Kendi tarayıcınız üzerinden doğrudan Python veri yapıları üzerine pratik problemler çözebileceğiniz bir platformdur.