2015-11-03 17:19 GMT+01:00 Pietro Battiston <m...@pietrobattiston.it>: > Salve a tutti di nuovo, > > se definisco un semplice Fibonacci con una cache (volutamente un po' > stupida): >
> [...] > E va bene che il > dizionario Python è una struttura efficiente, ma... è sempre una hash > table più un indexing, come fa a battere un semplice indexing? > [...] > ... ma resta il fatto (verificato con %lprun) che "cached = cache[n]" è più > veloce quando cache è un dizionario (~0.3 µs) che quando è un array (~0.4 µs). > > Ciò umilia quel briciolo di comprensione delle strutture di dati che credevo > di avere. Qualcuno sa illuminarmi? > Tieni conto che con Python è ben possibile che ci siano altri fattori che "mascherano" le performance reali [1]. Magari l'indexing di un array numpy non accede direttamente alla memoria come accade in C. Fai un paio di altri test, usando: 1) array (della libreria standard, anche se Python 3.x per avere intery a 64 bits) 2) Cython usando un array C [1] Proprio l'altro giorno mi è successa una cosa del genere in un progetto in Go, dove la creazione di una goroutine falsava completamente il test, facendo apparire l'implementazione più lenta come più veloce. Tolto il codice addizionale ho ottenuto i risultati corretti. Ciao Manlio _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python