Shallow Copy vs Deep Copy (copy module)
1Concept
1. Reference Assignment (`b = a`) aliases the identical memory object; 2. Shallow Copy (`copy.copy(a)`) duplicates the outer container but shares references to nested elements; 3. Deep Copy (`copy.deepcopy(a)`) recursively clones all nested objects and tracks visited IDs to avoid infinite loops on circular graphs.
2Architecture Diagram
Original: [ Ref A, [Nested List] ] Shallow: [ Ref B, [Points to SAME Nested List!] ] Deep Copy: [ Ref C, [Brand New Cloned Nested List] ]
3Code Example
Python 3.12
import copy
original = [1, [2, 3]]
shallow = copy.copy(original)
deep = copy.deepcopy(original)
original[1].append(99) # Mutating inner list
print(f"Original: {original}")
print(f"Shallow: {shallow} (Inner mutated!)")
print(f"Deep: {deep} (Completely protected!)")4Expected Output
Original: [1, [2, 3, 99]] Shallow: [1, [2, 3, 99]] (Inner mutated!) Deep: [1, [2, 3]] (Completely protected!)
5Key Takeaways
- ✓Modifying nested elements inside a shallow copy corrupts the original data.
- ✓`copy.deepcopy()` maintains a memo dictionary to prevent infinite recursion on circular objects.
- ✓Custom classes can override `__copy__()` and `__deepcopy__()` for fine-grained control.