ใน Python Assignment Operator ไม่สร้าง Object ใหม่ แต่ให้ชื่ออีกชื่อหนึ่งกับ Object ที่มีอยู่แล้ว สามารถตรวจสอบได้ด้วยฟังก์ชัน id()
>> L1 = [1,2,3,4]
>>> L2 = L1
>>> id(L1)
185117137928
>>> id(L2)
185117137928
เพื่อ Copy List จริงๆ สามารถใช้วิธีต่อไปนี้
1. Slice Operator
โพรแอนด์สองตัวของ Slice Operator คือ Index เริ่มต้นและสิ้นสุดของ Slice หากไม่ใช้อย่างชัดเจน ทั้งคู่ Default เป็นต้นและท้ายของ Sequence เราสามารถใช้ประโยชน์จาก Feature นี้ได้
>> L1 = [1,2,3,4]
>>> L2 = L1[:]
>>> L1
[1, 2, 3, 4]
>>> L2
[1, 2, 3, 4]
>>> id(L1)
185117025160
>>> id(L2)
185117171592
2. Built-in list() Method
>> L1 = [1,2,3,4]
>>> L2 = list(L1)
>>> L1
[1, 2, 3, 4]
>>> L2
[1, 2, 3, 4]
>>> id(L1)
185117295816
>>> id(L2)
185117209352
3. Copy Module
โมดูล copy ของ Python Standard Library มีฟังก์ชันสำหรับ Shallow และ Deep Copy ของ Objects ในขณะที่ Deep Copy เป็น Nested Copying ใน Shallow Copy Inner List ถูก Copy โดย Reference เท่านั้น
>> import copy
>>> L1 = [1,2,3,4]
>>> L2 = copy.copy(L1)
>>> L1
[1, 2, 3, 4]
>>> L2
[1, 2, 3, 4]
>>> id(L1)
185117025160
>>> id(L2)
185117295880
>>> L3 = copy.deepcopy(L1)
>>> L3
[1, 2, 3, 4]
>>> id(L3)
185117304328