# 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.

### 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.