Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การคัดลอก Nested List (ลิสต์ซ้อน) ใน Python

การคัดลอก 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()