การคัดลอก Nested List (ลิสต์ที่มีลิสต์อยู่ภายใน) ต้องระวังเรื่อง Shallow Copy vs Deep Copy บทความนี้เปรียบเทียบ 3 วิธี
วิธีที่ 1: ใช้ Loop แบบ Manual (Deep Copy)
nested_list = [[1, 2], [3, 4], [5, 6, 7]]
copy = []
for sub_list in nested_list:
temp = []
for element in sub_list:
temp.append(element)
copy.append(temp)
print(copy) # [[1, 2], [3, 4], [5, 6, 7]]
วิธีที่ 2: ใช้ List Comprehension + Unpacking (*)
nested_list = [[1, 2], [3, 4], [5, 6, 7]] copy = [[*sub_list] for sub_list in nested_list] print(copy) # [[1, 2], [3, 4], [5, 6, 7]]
วิธีที่ 3: ใช้ copy.deepcopy() (แนะนำสำหรับ Deep Copy จริง)
import copy nested_list = [[1, 2], [3, 4], [5, 6, 7]] copy = copy.deepcopy(nested_list) print(copy) # [[1, 2], [3, 4], [5, 6, 7]]
ความแตกต่างสำคัญ
| วิธี | ประเภท | หมายเหตุ |
|---|---|---|
| Loop / [*sub_list] | Shallow copy (1 level) | คัดลอกระดับแรกเท่านั้น หาก sublist มี object ซ้อนลึกกว่านี้ จะอ้างอิงเดิม |
| copy.deepcopy() | Deep copy (ทุกระดับ) | คัดลอกทุกอย่างสร้าง object ใหม่ทั้งหมด ปลอดภัยที่สุด |
สรุป: สำหรับ nested list ระดับ 2 (list of lists) วิธีที่ 1 และ 2 ใช้ได้ ไม่แตกต่าง แต่หากโครงสร้างซับซ้อนกว่า (list of list of lists...) ควรใช้ copy.deepcopy()