By value or by reference?

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


"Riccardo Rossi" <riccardo.rorssi76 at email.it> 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)
    else:
        print "%s does not assigns by value" % (language)

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

doesThisLanguageBindByValue('Python')
========================================================================



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