DonanımHaber Mini sürüm 2 Ocak 2026 tarihi itibariyle kullanımdan kalkacaktır. Bunun yerine daha hızlı bir deneyim için DH Android veya DH iOS uygulamalarını kullanabilirsiniz.
a = [1,2,3,4] olarak bir list var. Aşağıdaki her iki satır da a'ya 9 ekler. Aralarında performans farkı var mıdır? Neden? Cevabinizi destekleyen kaynaklar gösteriniz. a += [9] a[4:] = [9]
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
Subset alarak atama yapmak daha yavaş kalır. Öncesinde listenin 4:'e karşılık gelen subsetini alıyor, onu [9] ile yer değiştiriyor, ve geri atıyor. += ve list tipinin kendi fonksiyonu append() daha hızlı çalışıyorlar. list.append() en hızlı çalışıyor.
benim makinemde şöyleler 1000 iterasyonda şöyleler zaman bakımından (dolayısıyla kaynak deneme yanılma): += 0.00041727899999999263 s subset assignment 0.0006215100000000473 s append() 0.0003777419999999587 s
Kusurumuza bakma artık yardım etmeyi denedik. Ağız alışkanlığı, subset deyivermişim. Süreler de zaten 1000 iterasyon üzerindendi, şu da 10 milyon iterasyonlu:
+= 2.206635226 s slicing 3.3122043559999996 s append() 2.1419355849999997 s
şu tablodahttps://docs.python.org/3/library/stdtypes.html#mutable-sequence-types s.append() için "same as s[len(s):len(s)] = [x]" demiş, ben de aslında onun aynısı s[len(s):] kullandım. slicing neden append()'e göre yavaş oluyor? biraz daha büyük listeler ve iterasyon sayılarıyla dener misin? mesela 1000lik liste kullan, list comprehesion ile tutabilirsin, veya döngüde kendin oluştur
< Bu mesaj bu kişi tarafından değiştirildi seyfi84 -- 10 Haziran 2019; 12:52:46 >
Muhtemelen nasıl çalıştığını ve beklenen davranışını açıklamak adına öyle söylemişler. CPython seviyesinde daha optimize çalışması adına işleyişleri değişebiliyor metotların (f-string'ler de güya .format ile aynı işi yapıyor ama daha hızlı). Başlangıçta öyle yazılıp sonra performans için revize edilip wiki güncellenmeyi unutmuş da olabilir. Özellikle bu built-in tiplerin metotlarında falan oluyor bu. Ki zaten dis de built-in metotların bazılarını disassemble etmiyor. Tek ve atomik op olduğu için.
S[s:e] ifadesi o slice'ı almak için aradaki basamakları itere ediyor, O(n). append() O(1) operasyon (kaynak). Sayıları artırsak hız farkı append lehine daha da açılır büyük ihtimalle cevabı attıktan sonra deneyeceğim.
< Bu mesaj bu kişi tarafından değiştirildi KaramazovX -- 10 Haziran 2019; 13:13:10 >
Çoklu eleman ekliyorsak extend() kullanmak lazımdı öyle denedim. Onda çok fark olmuyor. 1000 elemanı 1000 elemanla birleştirmeye çalışınca sonuç şu (10bin tekrar):
+= 1.429600953 s slice 1.455506979 s extend() 1.4946402209999996 s
1000 elemanlı listeye tekil eleman ekleme (100bin tekrar), bu enteresan:
Alınan slice'ın boyutuna göre ölçekleniyor o halde harcadığı zaman miktarı. Başka bir anlam çıkarmadım ben buradan. Senin fikrin var mı? Ve madem böyleydi wiki'de ne maksatla sabit zamanlı çalışır diyor bu adamlar?
Bu arada bunlar foruma sınav sorusu falan mıydı neydi, ben hakkaten gerekli diye benchmark falan atıyorum da yani bildiğimden veya açıklayabileceğimden değilmiş demek ki
< Bu mesaj bu kişi tarafından değiştirildi KaramazovX -- 10 Haziran 2019; 13:46:54 >
olarak bir list var. Aşağıdaki her iki satır da a'ya 9 ekler. Aralarında performans farkı var mıdır? Neden? Cevabinizi destekleyen kaynaklar gösteriniz.
a += [9]
a[4:] = [9]
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
< Bu ileti mini sürüm kullanılarak atıldı >