Pillola Liste Python: quando append() produce una lista di elementi tutti uguali

Spread the love
Liste Python: l'uso del metodo append()
Liste Python: l’uso del metodo append()

Liste Python: provando a costruire una lista, con un metodo learn di una certa classe P che ritorna una lista

for i in range(1,5):
    w=P.learn()
    print(type(w))
    hist_w.append(w)
    print("hist_w", hist_w)

i valori di w ritornati ad ogni ciclo erano del tipo

[-1.7968410695441766, 1.1, 0.20315893045582345]
[-2.4943448781251716, 1.1, -0.4943448781251717]

ma la lista hist_w al primo ciclo conteneva

[[-1.7968410695441766, 1.1, 0.20315893045582345]]

Al secondo ciclo conteneva

[[-2.4943448781251716, 1.1, -0.4943448781251717],
[-2.4943448781251716, 1.1, -0.4943448781251717]]

e così via, cioè anziche venire aggiunto l’ultimo elemento (anche lui una lista) alla lista, venivano sostituiti tutti gli elementi della lista con l’ultima lista calcolata.

Il problema è che stavo copiando ogni volta il riferimento alla variabile w (che è lo stesso ad ogni ciclo) e non il contenuto della variabile stessa (che cambia ad ogni ciclo):

[<riferimento a w>, <riferimento a w>, …]

Per disinnescare l’errore ho fatto così:

for i in range(1,5):
    w=P.learn()
    print(type(w))
    hist_w.append(w[:])
    print("hist_w", hist_w)

Notate il [:] accanto al nome della variabile.

Liste Python: altre risorse utili

Strutture dati Python

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.