คำสั่งการมอบหมายใน Python ไม่ได้คัดลอกวัตถุพวกมันสร้างการเชื่อมโยงระหว่างเป้าหมายและวัตถุ
ดังนั้นdict2 = dict1
จะมีผลผูกพันระหว่างdict2
และวัตถุที่dict1
อ้างถึงอีก
ถ้าคุณต้องการคัดลอก Dict copy module
คุณสามารถใช้ โมดูลคัดลอกมีสองอินเตอร์เฟส:
copy.copy(x)
Return a shallow copy of x.
copy.deepcopy(x)
Return a deep copy of x.
ความแตกต่างระหว่างการทำสำเนาแบบตื้นและลึกนั้นเกี่ยวข้องเฉพาะกับวัตถุแบบผสม (วัตถุที่มีวัตถุอื่น ๆ เช่นรายการหรืออินสแตนซ์ของคลาส):
สำเนาตื้นสร้างวัตถุสารประกอบใหม่แล้ว (เท่าที่เป็นไปได้) แทรกอ้างอิงเป็นมันไปยังวัตถุที่พบในที่เดิม
การทำสำเนาแบบลึกจะสร้างวัตถุผสมใหม่จากนั้นแทรกการทำสำเนาซ้ำลงในวัตถุที่พบในต้นฉบับ
ตัวอย่างเช่นใน python 2.7.9:
>>> import copy
>>> a = [1,2,3,4,['a', 'b']]
>>> b = a
>>> c = copy.copy(a)
>>> d = copy.deepcopy(a)
>>> a.append(5)
>>> a[4].append('c')
และผลลัพธ์คือ:
>>> a
[1, 2, 3, 4, ['a', 'b', 'c'], 5]
>>> b
[1, 2, 3, 4, ['a', 'b', 'c'], 5]
>>> c
[1, 2, 3, 4, ['a', 'b', 'c']]
>>> d
[1, 2, 3, 4, ['a', 'b']]
dict1
และdict2
ชี้ไปที่ dict เดียวกัน