Come si profila l’utilizzo della memoria in Python?

| |

Recentemente mi sono interessato agli algoritmi e ho iniziato a esplorarli scrivendo un'implementazione ingenua e poi ottimizzandola in vari modi.

Ho già familiarità con il modulo Python standard per la profilazione del runtime ( per la maggior parte delle cose ho trovato sufficiente la funzione timeit magic in IPython), ma sono anche interessato all'utilizzo della memoria, quindi posso esplorare anche questi compromessi (ad esempio il costo della memorizzazione nella cache di una tabella di valori calcolati in precedenza rispetto al loro ricalcolo come necessario). Esiste un modulo che profila l'utilizzo della memoria di una determinata funzione per me?