Logo
Ana Sayfa
ÖZEL KODLAMA DERSLERİ
Yazılım Özel Ders
Tüm birebir programlara genel bakış
Python Yazılım Kursu
Sıfırdan ileri seviyeye birebir Python
Java Yazılım Kursu
OOP odaklı birebir Java eğitimi
AP Computer Science Principles
AP CSP sınav hazırlığı
GRUP DERSLERİ
Python & Django Masterclass
SINIRLI KONTENJAN
Java & Spring Boot Masterclass
SINIRLI KONTENJAN
C# .NET Masterclass
SINIRLI KONTENJAN
VİDEO DERSLER
Sıfırdan Temel Python Kursu
Kendi Hızında Öğren
ÜCRETSİZ
Seviye Testi
Ücretsiz — Python, Java, algoritma seviye testleri
Kariyerini Keşfet
Sertifika Doğrula
Belge numarası ve soyad ile doğrulama

Python'da List, Tuple ve Dictionary: Hangisini Ne Zaman Kullanmalısın?

Yazar: Berk Keskin 09.08.2026 ~11 dk okuma 26 Okunma
python-list-tuple-dictionary-farklari

Python'da list, tuple ve dictionary farkı temelde üç noktada toplanır: değiştirilebilirlik, sıralılık ve veriye erişim biçimi. List sıralı ve değiştirilebilir bir koleksiyondur, tuple sıralı ama sabittir, dictionary ise sıra numarası yerine anahtar-değer eşleşmesiyle çalışır. Bu üç yapıyı doğru yerde kullanmak, kodun hem daha hızlı çalışmasını hem de daha az hataya açık olmasını sağlar.

Aşağıdaki bölümlerde her yapının söz dizimini, davranışını ve pratik kullanım senaryolarını somut kod örnekleriyle karşılaştıracağız. Amaç, hangi veri yapısının hangi problemde daha mantıklı bir seçim olduğunu net biçimde ortaya koymak.

List, Tuple ve Dictionary Nedir? Temel Tanımlar ve Söz Dizimi

Python'da veri yapıları, birden fazla değeri tek bir isim altında saklamaya yarayan araçlardır. Bu araçların ortak adı koleksiyondur; list, tuple ve dictionary de bu koleksiyon ailesinin en sık kullanılan üç üyesidir. Her biri farklı bir söz dizimiyle tanımlanır ve farklı bir davranış sergiler, ancak üçü de birden fazla veriyi tek bir değişkende tutma amacını taşır.

List, köşeli parantez [] ile tanımlanır ve içine virgülle ayrılmış elemanlar yazılır. Farklı veri tiplerini aynı liste içinde tutmak mümkündür:

meyveler = ["elma", "armut", "muz"]
notlar = [85, 92, 78, 100]

Tuple ise görünüş olarak listeye benzer ama normal parantez () kullanılır. Tanımlandığı anda içeriği sabitlenir:

koordinat = (41.0082, 28.9784)
gunler = ("Pazartesi", "Salı", "Çarşamba")

Dictionary, süslü parantez {} ile tanımlanır ve elemanlar tek bir değer olarak değil, anahtar:değer çifti şeklinde saklanır. Her anahtar, kendisine bağlı değere ulaşmak için kullanılan bir etikettir:

ogrenci = {"ad": "Ayşe", "yas": 21, "bolum": "Bilgisayar Programcılığı"}

Bu üç yapının söz dizimi birbirine yakın görünse de, arkasındaki mantık tamamen farklıdır ve bu fark ileride hangi yapıyı seçeceğinizi belirleyen en önemli kriterdir. Yeni başlayanların bu yapıları örneklerle deneyerek öğrenmesi, teoriyi ezberlemekten çok daha kalıcı sonuç verir; bu yüzden birebir Python dersleri kapsamında bu tür temel veri yapıları bolca kod pratiğiyle işlenir. Bir sonraki bölümde bu üç yapının değiştirilebilirlik açısından nasıl ayrıştığına daha yakından bakacağız.

Değiştirilebilirlik Farkı: List Değişir, Tuple Değişmez

Mutability yani değiştirilebilirlik, bir veri yapısının oluşturulduktan sonra içeriğinin değiştirilip değiştirilemeyeceğini ifade eder. List, Python'da değiştirilebilir (mutable) bir yapıdır; oluşturulduktan sonra eleman ekleyebilir, çıkarabilir veya mevcut bir elemanı güncelleyebilirsiniz:

renkler = ["kırmızı", "mavi"]
renkler.append("yeşil")
renkler[0] = "sarı"
renkler.remove("mavi")
print(renkler)  # ["sarı", "yeşil"]

Tuple ise değiştirilemez (immutable) bir yapıdır. Bir tuple'ın içeriğini değiştirmeye çalıştığınızda Python hata verir:

koordinat = (41.0082, 28.9784)
koordinat[0] = 40.0000
# TypeError: 'tuple' object does not support item assignment

Bu hata mesajı aslında Python'un size şunu söylemesidir: tuple, tanımlandığı andaki hâliyle sabit kalmak üzere tasarlanmıştır. Bu özellik bir kısıtlama değil, tam tersine bir güvencedir. Bir koordinat çifti, bir yılın ayları veya bir renk kodunun RGB değerleri gibi mantıksal olarak değişmemesi gereken veriler için tuple kullanmak, kodun ilerleyen bir yerinde bu değerlerin yanlışlıkla değiştirilmesini engeller. Bu yüzden "sabit veri" ihtiyacı doğduğunda deneyimli geliştiriciler bilinçli olarak tuple'ı tercih eder. Dictionary konusunda ise durum biraz farklıdır. Dictionary'nin kendisi değiştirilebilir bir yapıdır; yeni anahtar-değer çiftleri ekleyebilir, mevcut bir anahtarın değerini güncelleyebilir veya bir anahtarı tamamen silebilirsiniz:

ogrenci = {"ad": "Ayşe", "yas": 21}
ogrenci["yas"] = 22
ogrenci["bolum"] = "Bilgisayar Programcılığı"

Yani mutability açısından list ve dictionary aynı tarafta durur, tuple ise tek başına farklı bir kategoride yer alır. Bu ayrımı net biçimde kavramak, ileride "neden bu veriyi değiştiremiyorum" tarzı hataların kaynağını hızlıca teşhis etmenizi sağlar.

Sıralılık ve İndeksleme: Erişim Mantığı Nasıl Çalışır

Sıralılık ve İndeksleme: Erişim Mantığı Nasıl Çalışır

List ve tuple, sıralı (ordered) yapılardır; her eleman, listeye ya da tuple'a eklendiği sırayla bir konum numarası (index) taşır. Python'da indeksleme 0'dan başlar, yani ilk eleman 0 numaralı konumdadır:

meyveler = ["elma", "armut", "muz"]
print(meyveler[0])  # elma
print(meyveler[2])  # muz

gunler = ("Pazartesi", "Salı", "Çarşamba")
print(gunler[1])  # Salı

Python ayrıca negatif indeksleme desteği sunar; bu sayede listenin veya tuple'ın sonundan başlayarak da eleman seçebilirsiniz. -1 her zaman son elemanı, -2 sondan ikinci elemanı işaret eder:

meyveler = ["elma", "armut", "muz"]
print(meyveler[-1])  # muz
print(meyveler[-2])  # armut

Dictionary'de ise durum tamamen farklıdır. Dictionary bir sıra numarasıyla değil, anahtar ile çalışır; bir değere ulaşmak için o değerin bağlı olduğu anahtarı bilmeniz gerekir:

ogrenci = {"ad": "Ayşe", "yas": 21, "bolum": "Bilgisayar Programcılığı"}
print(ogrenci["ad"])    # Ayşe
print(ogrenci["bolum"]) # Bilgisayar Programcılığı

Burada ogrenci[0] gibi bir sıra numarasıyla erişim denemesi hata verir, çünkü dictionary'nin mantığı konum değil eşleştirmedir. Bu fark, hangi yapıyı seçeceğinizi belirleyen pratik bir ölçüttür: verileriniz doğal bir sıraya sahipse ve sırayla işlenecekse list veya tuple; her veri parçasının kendine özgü bir etiketle (isim, kimlik, başlık gibi) tanımlanması gerekiyorsa dictionary daha uygun bir seçimdir. List ve tuple sırayı korurken, dictionary anlamlı bir eşleştirme sunar; bu iki farklı erişim mantığını doğru ayırt etmek, Python'da veriyle çalışırken karşılaşılan en temel karar noktalarından biridir.

Dictionary'de Anahtar-Değer Mantığı: Sözlük Benzetmesi

Dictionary yapısını anlamanın en kolay yolu, gerçek bir kelime sözlüğünü veya telefon rehberini düşünmektir. Bir kelime sözlüğünde kelimeleri sırayla ezberlemek zorunda kalmazsın; aradığın kelimeye direkt gidip karşılığını okursun. Python'daki dictionary yapısı da tam olarak bu mantıkla çalışır: her değer bir "anahtar" (key) ile eşleştirilir ve o anahtarı bildiğin an değere anında ulaşırsın. List ve tuple'da olduğu gibi "kaçıncı sırada" diye düşünmene gerek kalmaz; "hangi isimle kayıtlı" diye düşünürsün.

Bunu bir telefon rehberi örneğiyle somutlaştıralım. Aşağıdaki dictionary'de isimler anahtar, telefon numaraları ise değer olarak tutulur:

telefon_rehberi = {
    "Ayşe": "0532xxxxxxx",
    "Mehmet": "0555xxxxxxx",
    "Zeynep": "0505xxxxxxx"
}

print(telefon_rehberi["Mehmet"])

Bu kod çalıştırıldığında ekrana doğrudan Mehmet'in numarası yazdırılır. Burada dikkat edilmesi gereken nokta, "Mehmet" anahtarının rehberde var olması gerektiğidir; var olmayan bir anahtara bu şekilde erişmeye çalışırsan Python hata verir. Bu yüzden gerçek projelerde sıkça get() metodu kullanılır, çünkü bu metot anahtar bulunamazsa hata fırlatmak yerine varsayılan bir değer (örneğin None) döndürür ve programın çökmesini önler.

List ve tuple'daki sıra tabanlı erişimle dictionary'nin anahtar tabanlı erişimi arasındaki fark, veriye nasıl "isim koyduğunla" ilgilidir. List veya tuple'da rehber[1] yazdığında Python sadece "ikinci sıradaki eleman" der, o elemanın kime ait olduğunu bilmen için sırayı ezbere bilmen gerekir. Dictionary'de ise telefon_rehberi["Mehmet"] yazdığında veriye anlamlı bir isimle ulaşırsın; bu da özellikle çok sayıda ilişkili veriyi tutarken kodun okunabilirliğini ciddi şekilde artırır. Bu yapısal fark, dictionary'yi ilişkisel veri (bir şeyin başka bir şeye karşılık gelmesi) tutmak için list ve tuple'dan doğal olarak daha uygun hale getirir.

Karşılaştırma Tablosu: List vs Tuple vs Dictionary

Karşılaştırma Tablosu: List vs Tuple vs Dictionary

Şimdiye kadar anlatılan farkları tek bir bakışta görmek, hangi veri yapısını ne zaman seçeceğine karar vermeni kolaylaştırır. Aşağıdaki tablo, üç yapının değiştirilebilirlik, sıralılık, söz dizimi, tipik kullanım alanı ve erişim şekli açısından yan yana karşılaştırmasını sunar.

Kriter List Tuple Dictionary
Değiştirilebilirlik Değiştirilebilir (mutable) Değiştirilemez (immutable) Değiştirilebilir (mutable)
Sıralılık Sıralı, eklenme sırasını korur Sıralı, eklenme sırasını korur Sıralı (anahtar sırası korunur)
Söz dizimi Köşeli parantez [] Normal parantez () Süslü parantez {}, anahtar:değer
Tipik kullanım alanı Sık değişen veri listeleri Sabit kalması istenen veri grupları Bir değeri başka bir değerle eşleştirme
Erişim şekli İndeks numarasıyla İndeks numarasıyla Anahtar ismiyle

Bu tablodaki en kritik fark tek cümleyle özetlenebilir: list ve tuple "veriyi sırayla tutup sıra numarasıyla erişme" mantığına dayanırken, dictionary "veriyi bir isimle etiketleyip o isimle erişme" mantığına dayanır.

Ne Zaman Hangisini Kullanmalı? Gerçekçi Senaryolar

Teorik bilgi tek başına yeterli değildir; gerçek senaryolarda hangi yapının neden tercih edildiğini görmek öğrenmeyi kalıcı hale getirir. İlk örnek, bir noktanın x ve y koordinatlarını tutma durumudur. Koordinat bilgisi tanım gereği sabittir; bir noktanın x değeri programın akışı içinde rastgele değişmemelidir. Bu yüzden burada tuple kullanmak mantıklıdır:

koordinat = (10, 25)
print("X:", koordinat[0])
print("Y:", koordinat[1])

Bu yapı sayesinde koordinat verisi yanlışlıkla kodun başka bir yerinde değiştirilemez, çünkü tuple değiştirilemez bir yapıdır ve bu da veri bütünlüğünü garanti eder.

İkinci örnek ise tam tersi bir ihtiyacı temsil eder: sürekli değişen bir alışveriş listesi. Alışveriş listesine ürün ekler, çıkarır, sırasını değiştirirsin; bu esnekliği ancak list sağlayabilir:

alisveris_listesi = ["ekmek", "süt", "yumurta"]
alisveris_listesi.append("peynir")
alisveris_listesi.remove("süt")
print(alisveris_listesi)

Burada listenin her an güncellenebilir olması, gerçek hayattaki alışveriş sürecinin doğasına birebir uyar.

Üçüncü senaryo, öğrenci adlarını notlarla eşleştirme ihtiyacıdır. Burada amaç sıralı bir dizi tutmak değil, her öğrenciyi kendi notuyla ilişkilendirmektir; bu da dictionary için klasik bir kullanım alanıdır:

ogrenci_notlari = {"Ali": 85, "Elif": 92, "Can": 78}
print(ogrenci_notlari["Elif"])

Bu üç senaryo, veri yapısı seçiminin rastgele değil, verinin doğasına göre yapılan bilinçli bir tercih olduğunu gösterir. Bu mantığı bol pratikle içselleştirmek istiyorsan, birebir Python dersleri kapsamında benzer gerçek senaryolar üzerinden adım adım çalışabilirsin. Sabit mi kalacak, sürekli mi değişecek, yoksa bir şeyle mi eşleştirilecek sorusunu her veri için sorduğunda doğru yapıyı seçmek artık refleks haline gelir.

Sık Yapılan Hatalar ve Nasıl Kaçınılır

Python'da veri yapılarıyla çalışırken öğrencilerin en sık karşılaştığı sorunların büyük bölümü, mutability kavramını ve erişim mantığını tam kavrayamamaktan kaynaklanır. Bu hataların çoğu ilk bakışta ürkütücü görünse de, hata mesajını doğru okumayı öğrendiğinde her biri aslında birer öğretmendir. Aşağıda en yaygın dört hatayı ve bunlardan kaçınmanın yollarını inceleyelim.

İlk hata, bir tuple'ı değiştirmeye çalışmaktır. Tuple oluşturulduktan sonra elemanlarına yeniden atama yapılamaz; bunu denemek doğrudan bir hataya yol açar:

koordinat = (10, 20)
koordinat[0] = 15
# TypeError: 'tuple' object does not support item assignment

Bu hatayı görmek, o veriyi tuple olarak tuttuğunuzun ve değiştirilmemesi gerektiğinin bir işaretidir; eğer veri gerçekten değişecekse baştan list kullanmak doğru çözümdür.

İkinci yaygın hata, list'te olmayan bir index'e erişmeye çalışmaktır. Bir listenin uzunluğunu bilmeden rastgele bir indekse ulaşmak IndexError fırlatır:

meyveler = ["elma", "armut"]
print(meyveler[5])
# IndexError: list index out of range

Bu hatadan kaçınmak için len() fonksiyonuyla listenin boyutunu kontrol etmek veya döngülerde for eleman in liste yapısını kullanmak güvenli bir alışkanlıktır.

Üçüncü hata, dictionary'de olmayan bir anahtara doğrudan köşeli parantezle erişmektir. Bu durumda KeyError alınır. Bunu önlemenin en pratik yolu .get() metodunu kullanmaktır; anahtar yoksa hata fırlatmak yerine varsayılan bir değer döner:

ogrenci = {"ad": "Ayşe"}
print(ogrenci.get("not", "Not girilmemiş"))
# Not girilmemiş

Dördüncü ve daha kavramsal hata, list ile tuple'ı birbirine karıştırıp yanlış veri yapısını seçmektir. Örneğin sürekli güncellenmesi gereken bir alışveriş listesini tuple olarak tutmak, sonradan eleman ekleyememe sorununa yol açar. Bu tür kavramsal karışıklıkları netleştirmek isteyenler için birebir ilerleyen özel Python dersleri bu noktada pratik geri bildirim sağlar; çünkü hatayı bizzat yaparken doğru mantığı görmek, sadece okuyarak öğrenmekten daha kalıcıdır.

Hangisini Seçmeliyim? Adım Adım Karar Rehberi

Üç veri yapısı arasında seçim yaparken karmaşık kurallar ezberlemek gerekmez; birkaç basit soruyu sırayla kendinize sormanız yeterlidir. Aşağıdaki adımlar, gerçek bir proje sırasında karar verme sürecini basitleştirir.

  1. Veri programın çalışması sırasında değişecek mi? Eğer eleman ekleme, çıkarma veya güncelleme ihtiyacı varsa list doğru seçimdir. Veri sabit kalacaksa ve asla değişmeyecekse tuple'a geçin.
  2. Verinin sırası anlam taşıyor mu? Sıra önemliyse (örneğin bir işlem adımları listesi) list veya tuple kullanılır. Sıra önemli değil, her değere bir isimle ulaşmak gerekiyorsa dictionary'ye yönelin.
  3. Her değeri bir isimle mi çağırmak istiyorum? "Öğrencinin adı", "notu", "yaşı" gibi anlamlı etiketlerle erişim gerekiyorsa dictionary en okunabilir çözümdür.
  4. Veri, sabit bir kayıt gibi mi davranıyor? Bir koordinat, bir tarih ya da bir RGB renk kodu gibi birlikte anlam kazanan sabit gruplar için tuple idealdir.
  5. Performans ve bellek önemli mi? Büyük ve sabit veri kümelerinde tuple, list'e göre daha az bellek kullanır ve biraz daha hızlı işlenir; bu küçük fark büyük ölçekli uygulamalarda hissedilir hâle gelir.

Bu beş soruyu sırayla yanıtladığınızda, elinizdeki veri için hangi yapının daha uygun olduğu netleşir. Ancak teorik bilgi tek başına yeterli değildir; gerçek öğrenme, farklı senaryolarda bu üç yapıyı bilfiil deneyerek gelir. Küçük bir not defteri uygulaması için list, bir öğrenci kaydı için dictionary, bir renk paleti için tuple yazmayı deneyin; hangi durumda hangi hatayı aldığınızı görmek anlayışınızı hızla derinleştirir.

Öğrendiklerinizi ne kadar içselleştirdiğinizi ölçmek isterseniz Python bilgi testi üzerinden kısa sorularla kendinizi sınayabilirsiniz; bu tür testler, hangi konuların pekiştirilmesi gerektiğini net biçimde gösterir ve bir sonraki çalışma planınızı şekillendirmenize yardımcı olur.

Sık Sorulan Sorular

List ile tuple arasındaki en temel fark nedir?

En temel fark değiştirilebilirliktir: list oluşturulduktan sonra eleman ekleme, çıkarma ve güncelleme işlemlerine açıktır, tuple ise oluşturulduğu andaki hâliyle sabit kalır ve içeriği değiştirilemez.

Dictionary'de anahtar olarak hangi veri tipleri kullanılabilir?

Dictionary'de anahtar olarak yalnızca değiştirilemez (immutable) veri tipleri kullanılabilir; bu yüzden string, sayı ve tuple anahtar olabilirken, list veya başka bir dictionary anahtar olarak kullanılamaz.

Tuple içindeki bir elemanı değiştirmek gerçekten mümkün değil mi?

Tuple'ın kendisi değiştirilemez, ancak içinde bir list barındırıyorsa o listenin elemanları değiştirilebilir; yani tuple'ın "kabuğu" sabittir, içindeki değiştirilebilir bir yapı varsa o yapının içeriği yine değişebilir.

Bir dictionary'de olmayan anahtara erişmeye çalışırsam ne olur?

Köşeli parantez ile erişim yaparsanız KeyError hatası alırsınız; bunun yerine .get() metodunu kullanırsanız hata almadan varsayılan bir değer döner ve program çökmez.

List, tuple ve dictionary aynı programda birlikte kullanılabilir mi?

Evet, gerçek projelerde bu üç yapı sıklıkla birlikte kullanılır; örneğin bir dictionary'nin değeri bir list olabilir veya bir list içinde birden fazla dictionary elemanı bulunabilir, bu iç içe kullanım Python'da oldukça yaygındır.

Yeni başlayan biri hangi veri yapısını önce öğrenmeli?

Genellikle list ile başlamak mantıklıdır çünkü en sezgisel ve en sık kullanılan yapıdır; list oturduktan sonra tuple'ın mantığı hızla anlaşılır, dictionary ise anahtar-değer kavramı netleştikten sonra doğal bir devam adımı olur.

Sırası önemli olmayan ama tekrar etmemesi gereken veriler için hangi yapı uygundur?

Bu senaryo aslında set veri yapısını çağırır; ancak list, tuple ve dictionary arasında karar verirken sırasız ve isimlendirilmiş erişim ihtiyacı varsa dictionary, sadece tekil değerlerin bir arada tutulması yeterliyse Python'un set yapısı değerlendirilebilir.

List, tuple ve dictionary arasındaki farkları netleştirmek, Python öğreniminde sağlam bir temel kurmanın en önemli adımlarından biridir. Bu kavramları teoride öğrenmek kadar, gerçek projelerde deneyerek pekiştirmek de kritik önem taşır; bu süreçte yapılandırılmış bir yol izlemek isteyenler Python yazılım kursu içeriğine göz atarak adım adım ilerleyebilir.

Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

İlgili Eğitimler

Berk Keskin — Yazılım Geliştirici ve Eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; bugün öğrencinin seviyesine ve hedefine göre şekillenen sürdürülebilir öğrenme sistemleri tasarlıyor. 300'den fazla kişiye ezber değil, düşünerek kod yazmayı öğretti — Berk Akademi'de izlemeye değil üretmeye dayalı öğrenme kültürünü o kuruyor.

WhatsApp Hemen Ara