2012/1/18 Giuseppe Amato <giuam...@gmail.com>:
Sempre tenendo in considerazione il costo computazione di rimuovere
elementi in mezzo o in testa ad una lista python ordinaria.
Quindi c'è differenza in termini di costo computazione tra:
lista=lista[:-1]
e
lista.pop()
?
Non mi ero mai posto il problema, ma immaginavo che le due
istruzioni
fossero equivalenti.
A meno che il pop oltre la riassegnazione della lista effettui anche
l'eliminazione e lo spostamento degli altri elementi.
Mi sai dare qualche risorsa?
Più che altro queste due istruzioni sono completamente diverse dal
punto di vista semantico: la prima crea una nuova copia della lista,
tranne l'ultimo elemento. La seconda la cambia sul posto. Se in
precedenza hai un secondo assegnamento:
lista2 = lista
e poi esegui queste operazioni su "lista", cossa conterrà lista2?
On Wed, 18 Jan 2012 19:56:12 +0100, enrico franchi wrote:
Una chiamata di funzione e' un pochetto piu' lenta (visto che deve
istituire uno stack frame, ritornare, etc etc etc) di chiamare
direttamente un opcode. Ha senso. Suppongo (ma non sono un'esperto
degli internals che invece LOAD_ATTR e LOAD_CONST siano "grosso modo"
equivalenti -- ma sempre scommettendo, direi che LOAD_CONST e' piu'
veloce).
È così. LOAD_CONST è più veloce perché prende un elemento da un array
collegato al blocco di codice (l'argomento è la posizione dell'elemento
nell'array delle costanti).
In [1]: def f():
...: return [10,20,30]
...:
In [2]: f.func_code.co_consts
Out[2]: (None, 10, 20, 30)
In [3]: from dis import dis
In [4]: dis(f)
2 0 LOAD_CONST 1 (10)
3 LOAD_CONST 2 (20)
6 LOAD_CONST 3 (30)
9 BUILD_LIST 3
12 RETURN_VALUE
LOAD_ATTR equivale funzionalmente a getattr(), quindi potrebbe
richiedere di passare attraverso tutta la burocrazia di __getattr__ e
__getattribute__, effettuare il lookup al dizionario, se è un'istanza
chiedere alla classe e alle sue sopraclassi... potrebbe doversi fare un
discreto mazzo :) compreso invocare ulteriore codice Python.
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python