python - In che modo `var




python-3.x (2)

L'assegnazione var = [] associa il nome var all'elenco appena creato. Il nome var potrebbe essere stato o meno associato in precedenza a qualsiasi altro elenco e, in caso affermativo, tale elenco rimarrà invariato.

D'altra parte, var[:] = [] prevede che var sia già associato a un elenco e tale elenco viene modificato sul posto.

Ecco perché il comportamento in questi due casi è diverso:

var1 = [1, 2, 3]
var2 = var1
var1 = []
print(var1, var2)  # prints [] [1, 2, 3]

var1 = [1, 2, 3]
var2 = var1
var1[:] = []
print(var1, var2)  # prints [] []

Di solito capisco come si comportano le sezioni a sinistra e a destra dell'operatore di assegnazione.

Tuttavia, l'ho visto nel manuale di Python (3.8.0) e cercando di capire cosa mi sto perdendo.

cancella l'elenco sostituendo tutti gli elementi con un elenco vuoto

lettere [:] = []

In che modo differisce dalle sole letters = [] ?

(Non è facile cercare [:] poiché stackoverflow pensa che tu stia cercando un tag. Quindi, se c'è già una risposta, non riesco a trovarlo.)

Vedo alcune risposte piuttosto irrilevanti. Quindi, per chiarezza si spera, la domanda non riguarda il significato della sezione [:] , piuttosto di assegnare la lista vuota a una.


Questo codice mostra cosa sta succedendo:

original = ['a','b','c']

letters = original

print('Same List')
print(original)
print(letters)

letters = []

print('Different lists')
print(original)
print(letters)

letters = original

letters[:] = []

print('Same list, but empty')
print(original)
print(letters)

Produzione:

Same List
['a', 'b', 'c']
['a', 'b', 'c']
Different lists
['a', 'b', 'c']
[]
Same list, but empty
[]
[]

La prima parte del codice: letters = original significa che entrambe le variabili si riferiscono allo stesso elenco.

La seconda parte: letters = [] mostra che le due variabili fanno ora riferimento a elenchi diversi.

La terza parte: letters = original; letters[:] = [] letters = original; letters[:] = [] inizia con entrambe le variabili che si riferiscono nuovamente allo stesso elenco, ma poi l'elenco stesso viene modificato (usando [:] ) ed entrambe le variabili fanno ancora riferimento allo stesso elenco, ma ora modificato.





python-3.x