Copying lists is a very important concept in Python. Sometimes you need to duplicate a list so you can modify one version without affecting the original.
Python provides multiple ways to copy lists, and understanding the difference is very important to avoid unexpected bugs.
🔹 What is Copying a List in Python?
Copying a list means creating a new list with the same elements as the original list.
There are two types of copying:
- ✅ Shallow copy
- ✅ Deep copy (conceptually for nested structures)
In this tutorial, we focus on the most common list copying methods.
🔹 Why Do We Need to Copy Lists?
If you assign a list like this:
list2 = list1
Both variables point to the same memory location. So changes in one list affect the other.
🔹 Example: Wrong Way (Reference Copy)
list1 = [1, 2, 3]
list2 = list1
list2.append(4)
print("List 1:", list1)
print("List 2:", list2)
Output:
List 1: [1, 2, 3, 4]
List 2: [1, 2, 3, 4]
🔍 Problem:
Both lists changed because they are the same object.
🔹 1. Using copy() Method (Best Practice)
The copy() method creates a real independent copy of a list.
Syntax:
new_list = old_list.copy()
🔹 Example 1: Using copy()
list1 = [10, 20, 30]
list2 = list1.copy()
list2.append(40)
print("List 1:", list1)
print("List 2:", list2)
Output:
List 1: [10, 20, 30]
List 2: [10, 20, 30, 40]
✔ Original list is safe
✔ Independent copy created
🔹 2. Using list() Constructor
Another way is using the list() function.
Syntax:
new_list = list(old_list)
🔹 Example 2: Using list()
list1 = ["apple", "banana", "cherry"]
list2 = list(list1)
list2.append("mango")
print(list1)
print(list2)
Output:
['apple', 'banana', 'cherry']
['apple', 'banana', 'cherry', 'mango']
🔹 3. Using Slice Operator [:]
This is a very popular Python trick.
Syntax:
new_list = old_list[:]
🔹 Example 3: Using Slice Copy
list1 = [100, 200, 300]
list2 = list1[:]
list2.append(400)
print(list1)
print(list2)
Output:
[100, 200, 300]
[100, 200, 300, 400]
🔹 4. Using copy Module (Deep Copy)
For nested lists, use the copy module.
import copy
🔹 Example 4: Deep Copy
import copy
list1 = [[1, 2], [3, 4]]
list2 = copy.deepcopy(list1)
list2[0].append(99)
print("List 1:", list1)
print("List 2:", list2)
Output:
List 1: [[1, 2], [3, 4]]
List 2: [[1, 2, 99], [3, 4]]
✔ Fully independent nested structure
🔹 5. Difference Between Copy Methods
| Method | Type | Safe for Nested Lists | Best Use |
|---|---|---|---|
= assignment | Reference | ❌ No | Not recommended |
copy() | Shallow copy | ⚠️ Partial | Simple lists |
list() | Shallow copy | ⚠️ Partial | Simple lists |
[:] slicing | Shallow copy | ⚠️ Partial | Quick copy |
deepcopy() | Deep copy | ✅ Yes | Nested lists |
🔹 6. Real-Life Example
Copy product list before editing:
products = ["laptop", "phone", "tablet"]
backup = products.copy()
products.append("smartwatch")
print("Original:", products)
print("Backup:", backup)
Output:
Original: ['laptop', 'phone', 'tablet', 'smartwatch']
Backup: ['laptop', 'phone', 'tablet']
🔹 Key Points to Remember
-
=does NOT copy a list (it links it) -
copy(),list(), and[:]create shallow copies -
Use
deepcopy()for nested lists - Copying helps prevent accidental data changes
🚀 Conclusion
Python list copying is essential for writing safe and bug-free programs. Whether you're working with simple lists or complex nested data, knowing the correct copy method helps you control your data properly.
For most cases, copy() or [:] is enough—but for advanced structures, deepcopy() is the best choice.


0 Comments