?? **Understanding List References in Python: A Common Pitfall** ??
Shubham Rajput
Data Engineer | Google Cloud | Azure | ETL | DWH | BigQuery | SQL | Spark | Databricks | Python | LakeHouse | Cloud Storage |
Let's dive into an interesting quirk of Python that often trips up newcomers: list references and object mutability.
?? Consider this simple example:
LIST_1 = [1, 2]
LIST_2 = LIST_1
LIST_1.append(3)
print(f"LIST_1 ID: {id(LIST_1)}") # Added line to show ID
print(f"LIST_2 ID: {id(LIST_2)}") # Added line to show ID
print(f"LIST_1 = {LIST_1}")
print(f"LIST_2 = {LIST_2}")
'''
Output:
LIST_1 ID: 136566585738304
LIST_2 ID: 136566585738304
LIST_1 = [1, 2, 3]
LIST_2 = [1, 2, 3]
'''
?? What's Happening? ??
?? Assignment by Reference:
LIST_1 = [1, 2] creates a list object in memory.
LIST_2 = LIST_1 assigns LIST_2 to refer to the same object in memory as LIST_1. They don't create separate copies. This is why id(LIST_1) and id(LIST_2) return the same address.
Modification:
LIST_1.append(3) modifies the original list object in-place. Since both LIST_1 and LIST_2 reference the same object, the changes are reflected in both lists.
?? Key Point: In Python, assigning mutable objects (like lists) creates references, not copies. This means changes made through any reference are visible to all references pointing to the same object.
Want Independent shallow Copies? Here's how:
LIST_1 = [1, 2]
LIST_2 = LIST_1.copy() # or LIST_2 = list(LIST_1)
LIST_1.append(3)
print(f"LIST_1 ID: {id(LIST_1)}")
print(f"LIST_2 ID: {id(LIST_2)}") # Now IDs are different
print(f"LIST_1 = {LIST_1}")
print(f"LIST_2 = {LIST_2}")
'''
#Output :
LIST_1 ID: 136988001321472
LIST_2 ID: 136988003268288
LIST_1 = [1, 2, 3]
LIST_2 = [1, 2]
'''
Now, LIST_2 is an independent copy of the original list object. They have different memory addresses (id()), and changes to LIST_1 won't affect LIST_2.
?? Understanding this behavior is crucial for effective Python programming, especially when dealing with mutable objects. Avoid subtle bugs and unexpected behaviors by mastering references and copying.
Explore Shallow Copy vs. Deep Copy
#Python #Coding #ProgrammingTips #DataScience #SoftwareEngineering #LearningPython