By value or by reference?

Jacek Generowicz jacek.generowicz at
Tue Oct 19 10:26:41 CEST 2004

"Riccardo Rossi" <riccardo.rorssi76 at> writes:

> How does Python pass arguments to a function? By value or by reference?

[Or maybe "by name", or even "by need" ?]

Don't take anyone's word for it. Check for yourself.

Here's a program that tells you the answer. Should be trivially
translatable to many other languages.

def passCheck(b):
    b = 'new'

def doesThisLanguageBindByValue(language):
    a = 'original'
    b = a
    b = 'new'
    if a == 'original':
        print "%s assigns by value" % (language)
        print "%s does not assigns by value" % (language)

    a = 'original'
    if a == 'original':
        print "%s passes by value" % (language)
        print "%s does not pass by value" % (language)


Caveat: Once you've convinced yourself that the answer is "by value",
do notice that the values are references, so you can give the
impression that you have by-reference semantics, by passing or
assigning a mutable object and mutating it. But the _binding_
mechanism is most certainly "by value".

More information about the Python-list mailing list