Skip to content
Home » Pass by value Vs. Pass by Reference

Pass by value Vs. Pass by Reference


Pass by Value vs. Pass by Reference in Python

Many languages support either Pass by Value (copy of data is passed) or Pass by Reference (address/reference is passed).

But Python works differently.


Important: Python Uses “Pass-by-Object-Reference”

This means:

  • When you pass a variable to a function, the reference to the object is passed.
  • But behavior depends on the type of object:
    • Immutable objects behave like Pass by Value
    • Mutable objects behave like Pass by Reference

🔹 1. Immutable Objects (Pass by Value-like behavior)

Immutable objects include:

  • int
  • float
  • str
  • bool
  • tuple

When an immutable object is passed to a function:

✔ A reference is passed
❌ But you cannot change the original object inside function
✔ So it behaves like Pass by Value

Example:

def modify(x):
    x = x + 10
    print("Inside function:", x)

a = 5
modify(a)
print("Outside function:", a)

Output:

Inside function: 15
Outside function: 5

🔥 The original value a is NOT changed because integers are immutable.


🔹 2. Mutable Objects (Pass by Reference-like behavior)

Mutable objects include:

  • list
  • dict
  • set

When a mutable object is passed:

✔ Reference is passed
✔ You CAN modify the original object
✔ Behaves like Pass by Reference

Example:

def modify(lst):
    lst.append(100)
    print("Inside function:", lst)

a = [1, 2, 3]
modify(a)
print("Outside function:", a)

Output:

Inside function: [1, 2, 3, 100]
Outside function: [1, 2, 3, 100]

🔥 The original list a is CHANGED because lists are mutable.


Conclusion (Exam Answer)

TypeBehaviorExplanation
Immutable objectsPass by Value-likeNew object created inside function
Mutable objectsPass by Reference-likeChanges affect original object
Python ModelPass-by-Object-ReferenceFunction gets reference to object

📌 3. Diagram Explanation (Very Important for Exams)

For Immutable:

a → 5
modify(a)
Inside function: x → 15 (new object)
Outside: a → 5 (unchanged)

For Mutable:

a → [1,2,3]
modify(a)
Inside: list is modified
Outside: a → [1,2,3,100]

🔹 4. Rebinding vs Mutating

Rebinding (Does NOT affect original)

def func(x):
    x = [10, 20]     # rebinding

a = [1, 2, 3]
func(a)
print(a)             # unchanged

Mutating (Affects original)

def func(x):
    x.append(99)     # mutation

a = [1, 2, 3]
func(a)
print(a)             # changed

💡 Key Exam Points (Write these in your answer):

✔ Python uses pass-by-object-reference
✔ Immutable → behaves like pass-by-value
✔ Mutable → behaves like pass-by-reference
✔ Depends on object type, not function
✔ Rebinding vs Mutating is the key difference