vuoi
o PayPal
tutte le volte che vuoi
Tipo di Passaggio Comportamento pratico
oggetto (tecnico) modificarli)
AFFERMAZIONE DELLA PROF:
“con gli oggetti che in python hanno dei riferimenti (liste,
stringhe, matrici) accade un fatto strano, il valore non
viene ricopiato, ma la lista l1 della memoria locale
condivide lo stesso spazio di memoria della lista l1 della
memoria centrale. Si chiama Passaggio per riferimento”
SPIEGAZIONE:
� "Oggetti che in Python hanno dei riferimenti":
In Python ogni variabile è un riferimento
(puntatore) a un oggetto in memoria.
Alcuni oggetti, come liste, dizionari, matrici, sono
mutabili, cioè modificabili.
Quando li "passi" a una funzione, non viene creata
una copia, ma viene passato il riferimento.
� "Il valore non viene ricopiato":
Non si fa una copia "fisica" dell'oggetto.
La funzione vede e lavora sullo stesso oggetto che
si trova fuori dalla funzione.
� "La lista l1 nella memoria locale condivide lo
stesso spazio di memoria della lista l1 della memoria
centrale":
Quando chiami una funzione con una lista l1, la
funzione crea un nuovo nome l1 locale, ma questo
nome punta allo stesso oggetto.
Quindi:
La lista l1 nel programma principale (memoria
o centrale),
e la lista l1 dentro la funzione (memoria
o locale)
→ sono lo stesso oggetto in memoria.
Quindi viene mantenuto un riferimento alla stessa
area di memoria, il che significa che se una variabile
viene modificata, anche l’altra che punta allo stesso
oggetto cambierà.
Cosa significa "Passaggio per riferimento"?
Significa che non passi il contenuto, ma un collegamento
(riferimento) all’oggetto originale.
Quindi se modifichi l’oggetto dentro la funzione, la modifica si
riflette anche fuori.
ESEMPIO:
l1 = [1, 2, 3]
l2 = l1 # l2 non è una nuova lista, ma un riferimento a l1
l2.append(4) # Modificando l2, anche l1 cambia
print(l1) # Output: [1, 2, 3, 4]
ESEMPIO SUL SIDE EFFECT
l1 = [1, 2, 3]
x = 12
def modificaParametri(l1, x):
for i in range(len(l1)):
l1[i] = 0
x = 0
modificaParametri(l1, x)
print("la lista", l1) # ➝ [0, 0, 0]
print("x", x) # ➝ 12
▶ Quando chiami modificaParametri(l1, x):
Python non copia i dati, ma passa:
per l1 → il riferimento all’oggetto lista (stessa
o area di memoria)
per x → il valore (copiato), perché è un intero
o (immutabile)
▶All’interno della funzione: