In termini di documentazione ufficiale, per Domande frequenti sulla programmazione :
Remember that arguments are passed by assignment in Python.
Altrove nei documenti :
The actual parameters (arguments) to a function call are introduced in the local symbol table of the called function when it is called; thus, arguments are passed using call by value (where the value is always an object reference, not the value of the object).
dove la nota a piè di pagina aggiunge:
Actually, call by object reference would be a better description, since if a mutable object is passed, the caller will see any changes the callee makes to it (items inserted into a list).
Questo è coerente con il resto del modello di assegnazione di Python, ad esempio:
def somefunc(y):
y.append(1)
x = [0]
somefunc(x)
print x
è simile a:
x = [0]
y = x
y.append(1)
print x
in quanto l'oggetto assegnato al nome x
è anche assegnato al nome y
(anche se solo entro somefunc
nel primo).