Python'da list, dict, set ve tuple arasında seçim yapmak, verinin doğasını anlamaktan geçer: sıralı ve tekrar edebilen bir koleksiyon istiyorsan liste, anahtar-değer eşleşmesi istiyorsan sözlük, benzersiz ve tekrarsız eleman istiyorsan küme, değişmeyecek sabit bir grup istiyorsan demet kullanılır. Doğru python veri yapıları seçimi, kodun hem daha anlaşılır hem de mantıksal olarak daha tutarlı olmasını sağlar. Bu yazıda list dict set tuple farkı pratik senaryolar üzerinden, karmaşık teknik terimlere boğulmadan ele alınacak.
Aşağıdaki bölümlerde her yapının hangi ihtiyaca cevap verdiğini, ne zaman mutable immutable python ayrımının devreye girdiğini ve python liste arama ile küme/sözlük içinde arama arasındaki kavramsal farkı adım adım göreceksiniz.
List, Dict, Set, Tuple Nedir? Temel Doğalarını Anlamak
Python'daki dört temel koleksiyon türü birbirinden farklı bir soruna cevap vermek için tasarlanmıştır. Bu yapıları "hangisi daha hızlı" sorusuyla değil, "bu veri hangi karaktere sahip" sorusuyla ayırt etmek çok daha sağlıklı bir yaklaşımdır. Bir veri sıralı mı olmalı, tekrar eden eleman barındırabilir mi, sonradan değiştirilebilir mi, yoksa anahtar üzerinden mi erişilmeli — bu sorular seçimi belirler.
- List (liste): Sıralıdır, mutable'dır yani oluşturulduktan sonra elemanları eklenip çıkarılabilir, aynı değer birden fazla kez yer alabilir. Sepete atılan ürünler, bir formdaki adımlar gibi sırası önemli ve değişebilir veriler için uygundur.
- Dict (sözlük): Anahtar-değer mantığıyla çalışır; her değere bir anahtar üzerinden erişilir. Bir öğrencinin numarasıyla adının eşleştiği, bir ürün koduyla fiyatının ilişkilendiği durumlar dict'in doğal kullanım alanıdır. Mutable'dır, anahtarlar benzersiz olmak zorundadır.
- Set (küme): Sırasız bir koleksiyondur ve içinde her eleman yalnızca bir kez bulunabilir. Aynı öğeyi tekrar eklemeye çalışsanız bile küme bunu otomatik olarak tekilleştirir. Mutable'dır ama elemanların sırası anlamlı değildir.
- Tuple (demet): Listeye görünüşte benzer ama immutable'dır; yani oluşturulduktan sonra içeriği değiştirilemez. Bir koordinat çifti, bir tarih bilgisi gibi "bir kere belirlenip artık değişmeyecek" veriler için tercih edilir.
Bu dört yapının doğasını netleştirmek, ileride hangi senaryoda hangisinin kullanılacağını anlamanın temelini oluşturur. Kendi bilgi seviyenizi ölçmek isterseniz Python bilgi testi ile bu kavramlar üzerindeki hakimiyetinizi kontrol edebilirsiniz. Sonraki bölümde bu doğal farkların, erişim biçimini nasıl belirlediğine bakacağız.
Erişim İhtiyacına Göre Seçim: İndeks, Anahtar, Üyelik Kontrolü

Bir veri yapısı seçerken sorulması gereken en pratik soru şudur: bu veriye nasıl ulaşmak istiyorum? Sıradaki konuma göre mi, bir isimle mi, yoksa sadece "bu eleman burada var mı" diye mi bakacağım? Bu üç erişim biçimi doğrudan python hangi veri yapısı sorusunun cevabını şekillendirir.
Listede erişim indeks üzerinden yapılır: liste[0] ilk elemanı, liste[-1] son elemanı verir. Bu, sıralamanın anlamlı olduğu durumlarda oldukça doğaldır. Ancak listede belirli bir değerin var olup olmadığını kontrol etmek istediğinizde, Python listeyi baştan sona sırayla tarar; her elemanı tek tek kontrol eder ve eşleşme bulana kadar (ya da liste bitene kadar) devam eder.
Dict ve set'te durum farklıdır. Dict'te bir değere anahtar üzerinden doğrudan erişim sağlanır; Python listeyi baştan taramaz, anahtarın karşılığına doğrudan gider. Set'te de bir elemanın kümede olup olmadığını sorguladığınızda benzer bir doğrudan erişim mantığı işler, çünkü set aslında dict'in değersiz halidir. Aşağıdaki örnek üç erişim biçimini yan yana gösterir:
siparis_listesi = ["elma", "armut", "muz"]
urun_stogu = {"elma": 12, "armut": 5, "muz": 20}
mevcut_urunler = {"elma", "armut", "muz"}
# İndeksle erişim
print(siparis_listesi[1]) # armut
# Anahtarla erişim
print(urun_stogu["armut"]) # 5
# Üyelik kontrolü
print("armut" in mevcut_urunler) # True
print("çilek" in siparis_listesi) # sırayla tarar, sonunda False döner
Buradaki fark, kodun okunabilirliği açısından da önemlidir: eğer amacınız sadece "bu değer var mı" diye kontrol etmekse ve veri büyükse, listeyi sırayla taratmak yerine set veya dict yapısını tercih etmek hem daha net hem de daha mantıklı bir yaklaşımdır. Sıralamanın önemli olduğu, tekrar eden değerlerin olabileceği durumlarda liste; anahtarla eşleşme gerektiğinde sözlük; sadece varlık-yokluk kontrolü gerektiğinde küme, doğal seçim haline gelir.
Benzersizlik mi, Tekrar mı? Set'in Devreye Girdiği Yer
Bir veri kümesiyle çalışırken kendinize sormanız gereken temel sorulardan biri şudur: bu koleksiyonda aynı değerin birden fazla kez bulunması anlamlı mı, yoksa her değer yalnızca bir kez mi yer almalı? Bu sorunun cevabı, python set kullanımı gerekip gerekmediğini doğrudan belirler.
Örneğin bir alışveriş sepetinde aynı ürünün birden fazla kez geçmesi gayet doğaldır — iki tane elma almak istiyorsanız bu bilgi kaybolmamalıdır, dolayısıyla burada liste uygundur. Ama bir web sitesini ziyaret eden benzersiz kullanıcı adlarının kaydını tutmak istiyorsanız, aynı kullanıcının birden fazla kez listede görünmesi anlamsızdır; burada ihtiyaç benzersizliktir ve set tam olarak bu ihtiyaca cevap verir.
Set'in en pratik kullanımlarından biri, elinizde zaten tekrar eden elemanlar içeren bir liste varken bunu tekilleştirmektir:
ziyaretci_kayitlari = ["ayse", "mehmet", "ayse", "can", "mehmet", "ayse"]
benzersiz_ziyaretciler = set(ziyaretci_kayitlari)
print(benzersiz_ziyaretciler)
# {'ayse', 'mehmet', 'can'} -> sıra garanti edilmez, tekrar yoktur
print(len(benzersiz_ziyaretciler)) # kaç farklı kişi ziyaret etmiş
Bu örnekte dikkat edilmesi gereken iki nokta var. Birincisi, set'e dönüştürme işlemi sırasında elemanların orijinal sırası korunmaz; set sıralamayı önemsemez, yalnızca benzersizliği garanti eder. İkincisi, set içine yalnızca değiştirilemez (hashable) değerler konabilir; yani bir set'in içine başka bir liste koyamazsınız ama bir tuple koyabilirsiniz — bu da tuple'ın immutable doğasının nerede işe yaradığını gösteren ilk ipuçlarından biridir.
Set ayrıca iki farklı koleksiyon arasındaki ortak veya farklı elemanları bulmak için de kullanılır; örneğin iki farklı gün içindeki ziyaretçi kümesini kesiştirerek her iki gün de gelen kişileri bulabilirsiniz. Ancak set'in en temel ve en sık karşılaşılan kullanım nedeni, veride tekrar eden elemanların anlam taşımadığı, sadece "hangi değerler mevcut" sorusunun önemli olduğu durumlardır. Sıralamanın, tekrarın veya eleman sayısının kendisinin anlamlı olduğu durumlarda ise liste kullanmaya devam etmek daha doğru bir tercihtir.
Mutable mı, Immutable mı? Tuple'ın Tercih Edildiği Anlar
Bir veri yapısı seçerken sorulması gereken en temel sorulardan biri şudur: bu veri, oluşturulduktan sonra değişecek mi, yoksa hep aynı kalacak mı? Python'da mutable (değiştirilebilir) ve immutable (değiştirilemez) ayrımı, tam da bu soruya verdiğin cevaba göre şekillenir. List, dict ve set mutable'dır; içlerine eleman ekleyebilir, çıkarabilir veya var olan bir elemanı güncelleyebilirsin. Tuple ise immutable'dır; bir kez oluşturulduğunda içeriği değiştirilemez. Bu fark, tuple'ı "sabit kalması gereken veri" için doğal bir tercih hâline getirir.
Bir koordinat düşün: nokta = (41.0082, 28.9784). Bu enlem-boylam çifti, program çalıştığı sürece değişmesi beklenmeyen sabit bir bilgidir. Bunu list olarak [41.0082, 28.9784] şeklinde tutmak da teknik olarak mümkündür, ama anlamsal olarak yanlış bir mesaj verir: list kullanmak, "bu veri değişebilir" izlenimi bırakır. Tuple kullanmak ise kod okuyan başka birine (ya da birkaç ay sonra sana) bu verinin sabit olduğunu doğrudan söyler. Aynı mantık, bir yılın ay-gün ayrımı, bir RGB renk değeri veya bir fonksiyondan birden fazla değer döndürülürken de geçerlidir.
Tuple'ın belki de en pratik kullanım alanı, dict anahtarı olarak görev almasıdır. Dict anahtarlarının değiştirilemez (hashable) olması gerekir; bu yüzden list bir dict anahtarı olamazken, tuple rahatlıkla olabilir. Örneğin bir satranç tahtasındaki hücreleri {(0, 0): "kale", (0, 1): "at"} gibi koordinat çiftleriyle temsil etmek istediğinde, list değil tuple kullanmak zorundasın. Bu, "hangi veriyi anahtar yapabilirim" sorusunun cevabını doğrudan mutable/immutable ayrımına bağlar.
Bu ayrımı ilk öğrenirken kafa karıştırıcı gelebilir, çünkü çoğu yeni başlayan her şeyi list ile çözmeye alışkındır. Ancak veri yapısının doğasını anlamak, ileride hata ayıklarken de zaman kazandırır: beklenmedik bir değişiklik varsa, immutable bir yapı kullanıyorsan bu değişikliğin başka bir yerden geldiğini bilirsin. birebir Python dersleri kapsamında bu tür temel kavramlar, öğrencinin kendi kod örnekleri üzerinden adım adım pekiştirilir; çünkü mutable/immutable ayrımını gerçekten içselleştirmek, ezberden çok pratikle mümkün olur.
List İçinde Arama ile Set/Dict İçinde Arama: Kavramsal Fark

Bir elemanın bir koleksiyonda olup olmadığını kontrol etmek, günlük programlamada en sık yapılan işlemlerden biridir. Ancak bu kontrolü list üzerinde mi yoksa set veya dict üzerinde mi yaptığın, arka planda çok farklı bir mantıkla çalışır. List'te bir eleman arandığında Python, elemanı bulana veya listenin sonuna gelene kadar sırayla tarama yapar. Set ve dict'te ise durum farklıdır: buradaki elemanlar (ya da dict anahtarları) belirli bir iç düzenlemeyle saklanır ve arama, sırayla gitmek yerine doğrudan o konuma erişerek yapılır.
Bunu somutlaştırmak için basit bir örnek üzerinden bakalım:
kullanicilar_listesi = ["ayse", "mehmet", "elif", "can", "zeynep"]
kullanicilar_seti = {"ayse", "mehmet", "elif", "can", "zeynep"}
def listede_var_mi(isim):
return isim in kullanicilar_listesi
def sette_var_mi(isim):
return isim in kullanicilar_seti
print(listede_var_mi("zeynep"))
print(sette_var_mi("zeynep"))
Her iki fonksiyon da aynı sonucu (True) döndürür, ama arka planda olan biten farklıdır. listede_var_mi fonksiyonu, "zeynep" ismini bulana kadar listeyi baştan itibaren tek tek kontrol eder. sette_var_mi fonksiyonu ise "zeynep" değerinin set içindeki karşılığına doğrudan bakar; listeyi baştan sona dolaşmaya gerek duymaz. Dict için de aynı mantık geçerlidir: sozluk["anahtar"] ifadesi, sözlüğü taramaz, doğrudan o anahtarın karşılığına ulaşır.
Bu fark, özellikle koleksiyon büyüdükçe fark edilir hâle gelir. Birkaç elemanlık bir listede sırayla tarama pratikte bir sorun yaratmaz; ama binlerce kullanıcı adı, ürün kodu veya kayıt içinden "bu var mı yok mu" sorusunu sürekli soruyorsan, set veya dict kullanmak, kodun mantığını daha net ve amaca uygun hâle getirir. Burada asıl mesele hız yarışı değil, "bu veriye nasıl erişeceğim" sorusuna en baştan doğru cevabı vermektir. Üyelik kontrolü sık yapılacaksa, list yerine set veya dict düşünmek, ileride kodun büyümesiyle birlikte seni rahatlatan bir alışkanlıktır.
Karar Ağacı: Doğru Veri Yapısını Seçme Süreci
Dört veri yapısı arasında seçim yaparken zihinde net bir sıralama izlemek, kararsızlığı ortadan kaldırır. Aşağıdaki adımlar, bu seçimi basit sorulara indirger:
- Sıra önemli mi? Elemanların belirli bir düzende durması, hangi elemanın önce hangi elemanın sonra geldiğinin anlam taşıması gerekiyorsa list veya tuple düşünülmelidir; sıra önemli değilse set veya dict de değerlendirilebilir.
- Tekrar eden eleman olacak mı? Aynı değerden birden fazla bulunması gerekiyorsa (örneğin bir sınavdaki tüm notlar, aynı notun tekrar etmesi doğalsa) list veya tuple uygundur. Her elemanın yalnızca bir kez bulunması, tekrarların otomatik olarak elenmesi isteniyorsa set devreye girer.
- Veriye bir anahtar üzerinden mi erişilecek? "Bu kullanıcının yaşı kaç" veya "bu ürünün fiyatı ne" gibi bir etiket üzerinden değere ulaşman gerekiyorsa, dict bu ihtiyacı doğrudan karşılar.
- Veri sonradan değişecek mi? Program çalıştıkça eleman eklenecek, çıkarılacak veya güncellenecekse list, dict ya da set gibi mutable bir yapı gerekir. Veri bir kez oluşturulup hep aynı kalacaksa tuple tercih edilmelidir.
Bu dört soruyu sırayla kendine sorduğunda, çoğu senaryoda doğru veri yapısına kendiliğinden ulaşırsın. Kararı netleştirmek için aşağıdaki kavramsal karşılaştırma tablosuna da göz atabilirsin:
| Veri Yapısı | Sıralı mı? | Mutable mı? | Tekrar Eden Eleman | Tipik Kullanım |
|---|---|---|---|---|
| List | Evet | Evet | Var olabilir | Sıralı, değişken bir öğe koleksiyonu |
| Tuple | Evet | Hayır | Var olabilir | Sabit kalması gereken veri grubu |
| Set | Hayır | Evet | Yok (benzersiz) | Benzersizlik ve üyelik kontrolü |
| Dict | Hayır (anahtar sırası korunur) | Evet | Anahtar benzersiz, değer tekrar edebilir | Anahtar-değer ile eşleştirilmiş veri |
Bu tür kararları teoride bilmek ile pratikte doğru uygulamak arasında ciddi bir fark vardır; çoğu öğrenci doğru veri yapısını bilse bile ilk projelerinde alışkanlık yüzünden yanlış yapıyı seçer. Kendi seviyeni ve bu tür temel kavramlara ne kadar hâkim olduğunu görmek istersen, ücretsiz kodlama bilgisi testi ile hızlıca bir öz değerlendirme yapabilirsin.
Sık Yapılan Hata: Her Şeyi List ile Çözmeye Çalışmak
Python öğrenirken ilk tanışılan veri yapısı genellikle list olduğu için, birçok kişi ilerleyen süreçte de her problemi list ile çözme alışkanlığı geliştirir. Bir kullanıcı bilgisini saklarken, bir ürün stoğunu tutarken ya da tekrar eden kayıtları filtrelerken bile refleks olarak köşeli parantezlere yönelmek oldukça yaygın bir davranıştır. Oysa bu, veri yapısını probleme göre seçmek yerine problemi elimizdeki tek araca zorlamak anlamına gelir.
En sık görülen örneklerden biri, bir öğrencinin veya kullanıcının bilgilerini ayrı listelerde tutmaktır: isimler ayrı bir listede, yaşlar ayrı bir listede, notlar ayrı bir listede. Bu yapı hem okunması zor hem de listeler arasında sıra kayması riski taşıyan kırılgan bir çözümdür. Aynı bilgi bir dict ile çok daha anlamlı hale gelir:
# Alışkanlıkla list kullanımı
isimler = ["Ayşe", "Mehmet"]
yaslar = [23, 31]
# Anlamsal olarak doğru kullanım
ogrenciler = {"Ayşe": 23, "Mehmet": 31}
print(ogrenciler["Mehmet"]) # 31
Benzer şekilde, bir listede sürekli "bu eleman zaten var mı" kontrolü yapılıyorsa ve elemanların tekrar etmemesi gerekiyorsa, bu aslında bir set ihtiyacının işaretidir. Değiştirilmemesi gereken sabit bir grup değer -bir koordinat, bir renk kodu, bir konfigürasyon satırı- listede tutuluyorsa bu da tuple'ın devreye girmesi gereken bir andır. Veri yapısını probleme göre seçmek, kodu yazdıktan sonra değil, problemi tanımlarken verilmesi gereken bir karardır.
Bu kararı pratikle içselleştirmenin en sağlıklı yolu, farklı senaryolarda dört yapıyı da bilinçli olarak denemektir. Aynı problemi önce list, sonra dict veya set ile çözüp aradaki farkı gözlemlemek, teorik bilgiyi kalıcı hale getirir. birebir Python dersleri kapsamında bu tür alıştırmalar, öğrencinin doğru veri yapısını seçme sezgisini adım adım geliştirmesi için tasarlanır; çünkü bu sezgi, ezberlenecek bir kural listesinden çok, tekrar tekrar pratik yapılarak oturan bir refleks halini alır.
Sık Sorulan Sorular
List yerine ne zaman dict kullanmalıyım?
Verileriniz bir sıra numarasıyla değil de anlamlı bir etiketle -isim, kod, kimlik gibi- erişilmesi gereken bilgilerden oluşuyorsa dict daha uygundur. Örneğin bir kullanıcının bilgilerine "üçüncü eleman" yerine "email" anahtarıyla ulaşmak istiyorsanız, bu doğrudan bir dict ihtiyacıdır.
Set neden tekrar eden elemanları otomatik siler?
Set, matematikteki küme kavramını temel alır ve her elemanın yalnızca bir kez var olmasını garanti eder. Bir eleman sete eklenmeye çalışıldığında, o eleman zaten mevcutsa tekrar eklenmez; bu davranış set'in doğasında olan bir kuraldır, sonradan eklenen bir filtre değildir.
Tuple'ı liste yerine kullanmanın avantajı nedir?
Tuple, içeriğinin sonradan değiştirilemeyeceğini garanti eder. Bu, özellikle sabit kalması gereken bir veri grubunu -bir koordinat çifti, bir tarih bilgisi- kodun başka bir yerinde yanlışlıkla değiştirilmekten korumak istediğinizde değerli bir güvencedir.
Bir veri yapısını sonradan başka birine dönüştürmek mümkün mü?
Evet, Python'da list(), dict(), set() ve tuple() gibi yerleşik fonksiyonlarla bir veri yapısını diğerine dönüştürmek mümkündür. Örneğin bir listeyi set()'e vererek tekrar eden elemanlardan kolayca arındırabilirsiniz. Ancak dönüşüm sırasında sıra bilgisi veya tekrar eden değerler kaybolabileceği için, dönüşümü yapmadan önce hangi bilgiyi korumak istediğinizi netleştirmek gerekir.
Sözlük anahtarı olarak neden liste kullanılamıyor?
Dict anahtarlarının değiştirilemez, yani immutable olması gerekir; çünkü Python anahtarın konumunu belirlerken onun sabit kalacağını varsayar. List değiştirilebilir bir yapı olduğu için anahtar olarak kabul edilmez, ancak aynı görevi görebilecek tuple bu kısıtlamaya tabi değildir ve anahtar olarak kullanılabilir.
List, dict, set ve tuple arasındaki bu farkları kavramak, Python'da yazılan kodun hem daha okunabilir hem de daha az hataya açık olmasını sağlayan temel bir alışkanlıktır. Bu sezgiyi güçlendirmek isteyenler için 1-1 özel Python dersleri sayfası, kişiye özel alıştırmalarla bu konuyu derinleştirmek isteyenler için iyi bir başlangıç noktası olabilir.