'u çağırdığınızda ne olur? __hash__
ve __eq__
öğelerini uygulayan bir sınıfa sahibim (buna diyelim). Aynı zamanda myClass
nesnesini, biraz zaman alan bir değere çeviren bir dict
ürünüm var.Eğer 'dict' anahtarında
Programım boyunca, birçok (milyonlarca) myClass
nesnesi oluşturuldu. Bu yüzden bu değerleri takip etmek için dict
kullanıyorum. Ancak, bazen yeni bir myClass
nesnesi daha eski bir değere eşdeğer olabilir (__eq__
yöntemiyle tanımlandığı gibi). Bu nesnenin değerini tekrar hesaplamak yerine, dict
'daki eski myClass
nesnesinin değerini bulmayı tercih ederim. Bunu başarmak için if myNewMyClassObj in dict
yapıyorum.
İşte sorum: denilen Nelerin
Ben in
maddesi kullanan, __hash__
veya __eq__
? dict
kullanmanın amacı, O (1) arama süresinin olmasıdır. O zaman __hash__
aranmalıdır. Ancak, __hash__
ve __eq__
eşdeğer yöntemleri değilse ne olur? Bu durumda, if myNewMyClassObj in dict
için yanlış bir pozitif mi alacağım?
soru Takip:
Ben benim dict
girişlerin sayısını en aza indirmek istiyorum, bu yüzden ideal olarak dict
eşdeğer myClass
nesne kümeleri sadece bir tutmak istiyorum. Yani yine, if myNewClassObj in dict
hesaplarken __eq__
ihtiyaçları dict
'ın O'yu kirletmek hangi, çağrılacak görünüyor (1) Bir O zaman arama (n) seferinde arama
@MartijnPieters: Sadece kazara dahil edilmeden önce yanlışlıkla kazandım, şimdi oradalar. – BrenBarn
Fantastik örnekler! – inspectorG4dget
Python, karmaları karma tablolarında kullanmaz: her bir yuva, tek bir değer içeren yuvalar kullanır. Bir yuva doluysa, bir eşleşme veya kullanılmayan bir yuva bulana kadar başka bir yuva seçer. – Duncan