a = ['a']
a.extend(map(lambda x: 'b' + x, a))
si blocca il mio sistema fino a quando posso fare un Ctrl + C se corro come uno script Python dal guscio, e l'esecuzione dal interprete mi ha fatto avere per spegnere difficile la mia il computer portatile.
Tuttavia,
a = ['a']
a.extend(list(map(lambda x: 'b' + x, a)))
funziona bene e dà il risultato atteso.
Perché succede?
In un primo momento, ho pensato che potrebbe essere perché stavo cercando di estendere a
con una funzione di mappa che riceve un a
stesso, così mi ha scritto:
a = ['a']
tmp = map(lambda x: 'b' + x, a)
a.extend(tmp)
tuttavia, che anche congelato.
Allo stesso modo, questo sembra funzionare bene:
a = ['a']
tmp = list(map(lambda x: 'b' + x, a))
a.extend(tmp)
Perché succede questo?
Sto facendo questo su Python 3.4.3.
Questo funziona bene in python 2.7. * Quindi suppongo che il problema sia legato al fatto che la funzione 'map' restituisce un' map object' in python 3 (diversamente da un elenco in python 2). – puzzlepalace
Funziona bene per me sia su 3.4.3 che su 2.7.9 – alfasin
Hum. La mia intuizione è la stessa di quella originale --- questo odora di un problema di mutevolezza di lista. E il fatto che entrambe le versioni funzionino quando sono racchiuse nella lista() (che crea una copia della lista) è un grande indizio per questo. La mia ipotesi è che entrambe le versioni senza il codice di lista stanno mutando la lista originale (con la seconda versione che lo fa tramite un puntatore) e la mappa continua ad estenderle, portando ad un loop infinito. Tuttavia, le conseguenze della mutabilità delle liste e le cose bizzarre che Python fa con i puntatori sono molto al di sopra del mio voto, quindi questo potrebbe essere sbagliato ... –