Be the code below:
def modif1(lista):
lista = [4,5,6]
lista = [1,2,3]
modif1(lista)
print(lista) #resultado: [1,2,3]
def modif2(lista):
lista[0] = 4
lista[1] = 5
lista[2] = 6
lista = [1,2,3]
modif2(lista)
print(lista) #resultado: [4,5,6]
def modif3(lista):
lista[:] = [4,5,6]
lista = [1,2,3]
modif3(lista)
print(lista) #resultado: [4,5,6]
def modif4(lista):
L = lista[:]
L = [4,5,6]
lista = [1,2,3]
modif4(lista)
print(lista) #resultado: [1,2,3]
The modif1
function does not change the list because the scope of the function already has a variable with the name list.
The modif2
function modifies the list because it has no list name variable and access list (in scope global).
In function 3 comes the unexpected: when I do lista[:]
am not making a clone of lista
? Why then when I modify lista[:]
do I modify the original lista
and not just the clone? This being the case, what changes modif4
of modif3
?