Shallow copy vs Deep copy
Sự khác biệt
Phần tiêu đề “Sự khác biệt”Shallow copy - Copy cấp 1
Phần tiêu đề “Shallow copy - Copy cấp 1”import copy
original = [[1, 2], [3, 4]]shallow = original.copy() # or copy.copy(original)
# Sửa inner listshallow[0].append(5)
print(original) # [[1, 2, 5], [3, 4]] ❌print(shallow) # [[1, 2, 5], [3, 4]]Deep copy - Copy đệ quy
Phần tiêu đề “Deep copy - Copy đệ quy”import copy
original = [[1, 2], [3, 4]]deep = copy.deepcopy(original)
# Sửa inner listdeep[0].append(5)
print(original) # [[1, 2], [3, 4]] ✅print(deep) # [[1, 2, 5], [3, 4]]Khi nào dùng?
Phần tiêu đề “Khi nào dùng?”✅ Shallow: Flat structures
Phần tiêu đề “✅ Shallow: Flat structures”# List phẳngnums = [1, 2, 3]copy_nums = nums.copy() # ✅ Shallow đủ
# Dict phẳngdata = {"name": "Alice", "age": 25}copy_data = data.copy() # ✅ Shallow đủ✅ Deep: Nested structures
Phần tiêu đề “✅ Deep: Nested structures”# Nested listmatrix = [[1, 2], [3, 4]]copy_matrix = copy.deepcopy(matrix) # ✅ Cần deep
# Dict với list valuesdata = {"users": [{"name": "Alice"}]}copy_data = copy.deepcopy(data) # ✅ Cần deepPerformance
Phần tiêu đề “Performance”import copyimport timeit
data = [[1, 2, 3] * 100 for _ in range(100)]
# Shallow - Nhanhtimeit.timeit(lambda: data.copy(), number=10000)
# Deep - Chậm hơntimeit.timeit(lambda: copy.deepcopy(data), number=10000)Tóm tắt
Phần tiêu đề “Tóm tắt”Shallow vs Deep:
- Shallow: Copy cấp 1
- Deep: Copy đệ quy tất cả
- ✅ Shallow cho flat structures
- ✅ Deep cho nested structures
Pattern:
# Shallownew = original.copy()
# Deepimport copynew = copy.deepcopy(original)