Re: [Python] un dubbio sulle liste
On 5/24/20, Luigi Curzi wrote: > Ciao, ciao Luigi, > Il sab 23 mag 2020, 23:41 Giuliano Curti ha scritto: > >> On 5/23/20, Marco Beri wrote: >> > On Sat, 23 May 2020, 23:13 Giuliano Curti, >> > wrote: >> > >> >> >> >> 2) ... >> >> >> > >> > Perché sono la stessa lista. >> >> è quello che immaginavo, però logica vorrebbe (la mia che ho capito >> essere diversa da quella del sistema :-) ) che allora anche V=[0]*3 >> sia la ripetizione della stessa variabile e invece no; >> > > In python esistono oggetti immutabili e mutabili: gli interi (o le stringhe > o le tuple) sono immutabili, quindi non puoi cambiarne il valore una volta > creati, questo per dire che quelli lì sono 3 0 diversi, .. sì, le mutabilità ed immutabilità le conoscevo; quello che mi inganna è che sintassi apparentemente uguali generano due cose diverse, ma probabilmente sono "uguali" perchè mi sfugge qualcosa; > . > Qui la documentazione https://docs.python.it/html/ref/objects.html > Qui trovi la documentazione ad un modulo utile > https://docs.python.org/3.8/library/copy.html cercherò di approfondirlo qui, grazie, ciao, giuliano ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] un dubbio sulle liste
Ciao, Il sab 23 mag 2020, 23:41 Giuliano Curti ha scritto: > On 5/23/20, Marco Beri wrote: > > On Sat, 23 May 2020, 23:13 Giuliano Curti, wrote: > > > >> > >> 2) ... > >> > > > > Perché sono la stessa lista. > > è quello che immaginavo, però logica vorrebbe (la mia che ho capito > essere diversa da quella del sistema :-) ) che allora anche V=[0]*3 > sia la ripetizione della stessa variabile e invece no; > In python esistono oggetti immutabili e mutabili: gli interi (o le stringhe o le tuple) sono immutabili, quindi non puoi cambiarne il valore una volta creati, questo per dire che quelli lì sono 3 0 diversi, quando ne modifichi uno stai cestinando l'oggetto e ne stai creando uno nuovo (cioè con id diverso). Le liste invece sono mutabili quindi con quel *2 successivo stai creando sì due liste ma che fanno riferimento allo stesso oggetto (stesso id); ne consegue che modificando un elemento contenuto in una lista in realtà stai modificando l'oggetto referenziato e quindi tutte le sue referenze e quindi entrambe le liste. Altri oggetti mutabili sono i dizionari ad esempio. Spero di essere stato chiaro. Qui la documentazione https://docs.python.it/html/ref/objects.html Qui trovi la documentazione ad un modulo utile https://docs.python.org/3.8/library/copy.html ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] un dubbio sulle liste
On 5/23/20, Marco Beri wrote: > On Sat, 23 May 2020, 23:13 Giuliano Curti, wrote: > >> >> 2) ... >> > > Perché sono la stessa lista. è quello che immaginavo, però logica vorrebbe (la mia che ho capito essere diversa da quella del sistema :-) ) che allora anche V=[0]*3 sia la ripetizione della stessa variabile e invece no; è appunto questa differenza che mi torna strana (per chiara ipnoranza, ovviamente :-) > Prova con: > > M = [[0]*3 for n in range (2)] questo lo faccio di sicuro; > Ciao. > Marco. grazie della fulminante risposta, ciao, giuliano ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] un dubbio sulle liste
On Sat, 23 May 2020, 23:13 Giuliano Curti, wrote: > > 2) matrici (emulate con lista di liste), ad es. una matrice 2x3 >M = [[0]*3]*2 >M = [[0,0,0],[0,0,0]] >quando faccio M[0][1] = 5 mi trovo con M -> [[0, 5, 0], [0, 5, 0]] > cioè non solo >M[0][1] = 5, ma anche M[1][1] = 5; >lo stesso si ripete ovviamente con M[0][0] e con M[0][2]; >sembrerebbe cioè che gli elementi M[*][c] rimangano collegati; > Perché sono la stessa lista. Prova con: M = [[0]*3 for n in range (2)] Ciao. Marco. ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] un dubbio sulle liste
Ciao a tutti, mi permetto fare una richiesta qui: mi sfugge qualcosa nella gestione delle liste; non pretendo la soluzione pronta; una indicazione ad un testo o ad una sua porzione pertinente sarà più che sufficiente :-) sto operando con vettori e matrici con una asimmetria che non mi torna chiara: 1) vettori: qui il discorso è semplice, ad es. un vettore riga di 3 elementi (i vettori colonna rientrano nel caso sotto) V = [0]*3 V -> [0,0,0] V[1] = 5 V -> [0,5,0] tutto perfetto; 2) matrici (emulate con lista di liste), ad es. una matrice 2x3 M = [[0]*3]*2 M = [[0,0,0],[0,0,0]] quando faccio M[0][1] = 5 mi trovo con M -> [[0, 5, 0], [0, 5, 0]] cioè non solo M[0][1] = 5, ma anche M[1][1] = 5; lo stesso si ripete ovviamente con M[0][0] e con M[0][2]; sembrerebbe cioè che gli elementi M[*][c] rimangano collegati; attualmente uso la modalità M = [] for i in range (r): tmp = [] for k in range(c): tmp.append(0) M.append(tmp) M -> [[0,0,0],[0,0,0]] che mi consente quello che voglio, ad es. M[0][1] = 5 fornisce M -> [[0,5,0],[0,0,0]] ma c'è evidentemente qualcosa che mi sfugge e mi piacerebbe capire :-) grazie, saluti, giuliano ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python