4.15 Passing Arguments to Functions: A Deeper Look

  • Python arguments are always passed by reference.
  • Some people call this pass-by-object-reference, because
  • “everything in Python is an object.”
  • When a function call provides an argument, Python copies the argument object’s reference—not the object itself—into the corresponding parameter.

Memory Addresses, References and “Pointers”

  • After an assignment like the following, the variable x contains a reference to an object containing 7 stored elsewhere in memory.

Variable referring to an object

Built-In Function id and Object Identities

  • Every object has a unique identity—an int value which identifies only that object while it remains in memory.
  • Built-in id function to obtain an object's identity.
In [1]:
x = 7
In [2]:
id(x)
Out[2]:
4311725472

Passing an Object to a Function

In [3]:
def cube(number):
    print('id(number):', id(number))
    return number ** 3
In [4]:
cube(x)
id(number): 4311725472
Out[4]:
343
  • The identity displayed for cube’s parameter number is the same as that displayed for x previously.
  • The argument x and the parameter number refer to the same object while cube executes.

Testing Object Identities with the is Operator

  • The is operator returns True if its two operands have the same identity:
In [5]:
def cube(number):
    print('number is x:', number is x)  # x is a global variable
    return number ** 3
In [6]:
cube(x)
number is x: True
Out[6]:
343

Immutable Objects as Arguments

  • When a function receives as an argument a reference to an immutable (unmodifiable) object, even though you have direct access to the original object in the caller, you cannot modify the original immutable object’s value.
In [7]:
def cube(number):
    print('id(number) before modifying number:', id(number))
    number **= 3
    print('id(number) after modifying number:', id(number))
    return number
In [8]:
cube(x)
id(number) before modifying number: 4311725472
id(number) after modifying number: 4348973456
Out[8]:
343
In [9]:
print(f'x = {x}; id(x) = {id(x)}')
x = 7; id(x) = 4311725472

Mutable Objects as Arguments

  • We’ll show that when a reference to a mutable object like a list is passed to a function, the function can modify the original object in the caller.

©1992–2020 by Pearson Education, Inc. All Rights Reserved. This content is based on Chapter 4 of the book Intro to Python for Computer Science and Data Science: Learning to Program with AI, Big Data and the Cloud.

DISCLAIMER: The authors and publisher of this book have used their best efforts in preparing the book. These efforts include the development, research, and testing of the theories and programs to determine their effectiveness. The authors and publisher make no warranty of any kind, expressed or implied, with regard to these programs or to the documentation contained in these books. The authors and publisher shall not be liable in any event for incidental or consequential damages in connection with, or arising out of, the furnishing, performance, or use of these programs.