Questa wiki.python.org pagina su complessità algoritmica di alcune strutture di dati dice il seguente per un oggetto collections.deque
:Perché aggiungere o rimuovere dal centro di una collezioni è più lento della ricerca?
Una coda doppia (Deque) è rappresentato internamente come una lista doppiamente collegata. (Bene, una lista di matrici piuttosto che di oggetti, per una maggiore efficienza.) Entrambe le estremità sono accessibili, ma anche guardare al centro è lento, e l'aggiunta o la rimozione dal centro è ancora più lenta.
Due domande:
1) è l'aggiunta al centro di una deque
anche possibile? Non vedo alcun metodo per farlo in API.
2) Perché rimuovere (o aggiungere) essere più lento della ricerca nel mezzo di un deque
? È una lista doppiamente collegata, quindi aggiungi/rimuovi dovrebbe essere un'operazione a tempo costante una volta trovato l'oggetto che vuoi aggiungere.
Cosa vuoi dire alla fine quando si dice la memoria per un 'list' è "tutto uno pezzo"? Gli elenchi Python sono matrici contigue * di puntatori * non matrici contigue * di memoria *. Cioè, i puntatori sono contigui, ma qualsiasi cosa puntino a può essere ovunque, ed è uno dei motivi principali per la memoria fratturata in Python. Basti pensare all'assegnazione arbitraria della voce di elenco 2, ad esempio a un oggetto grande e pre-allocato, come 'my_list [1] = some_object' .. Probabilmente sono solo confuso dal tuo fraseggio, ma sicuramente non stai dicendo che tutto della "memoria" di 'my_lists' viene mescolata per il grande' some_object'? – ely
No, voglio solo dire che l'eliminazione o l'inserimento di elementi in un 'elenco' richiede lo spostamento di un solo blocco di memoria. Sono gli indicatori che vengono spostati, è vero. – kindall
Gotcha, grazie per aver chiarito. Per chiunque altro incappi in questi commenti, sto fondamentalmente facendo riferimento alla spiegazione dell'articolo di Jake VanderPlas ["Perché Python è lento"] (https://jakevdp.github.io/blog/2014/05/09/why-python- is-slow /), in particolare nella sezione 3 del modello a oggetti. – ely