ในขณะที่อ่านเอกสารสำหรับdict.copy()มันบอกว่ามันทำสำเนาตื้นของพจนานุกรม กันไปสำหรับหนังสือที่ฉันกำลังติดตาม (อ้างอิง Python ของ Beazley) ซึ่งกล่าวว่า:
กระบวนการ m.copy () วิธีการทำสำเนาตื้นของรายการที่มีอยู่ในวัตถุแผนที่และวางไว้ในวัตถุแผนที่ใหม่
พิจารณาสิ่งนี้:
>>> original = dict(a=1, b=2)
>>> new = original.copy()
>>> new.update({'c': 3})
>>> original
{'a': 1, 'b': 2}
>>> new
{'a': 1, 'c': 3, 'b': 2}
ดังนั้นฉันจึงสันนิษฐานว่าสิ่งนี้จะอัปเดตค่าของoriginal(และเพิ่ม 'c': 3) เช่นกันเนื่องจากฉันทำสำเนาตื้น เช่นถ้าคุณทำเพื่อรายการ:
>>> original = [1, 2, 3]
>>> new = original
>>> new.append(4)
>>> new, original
([1, 2, 3, 4], [1, 2, 3, 4])
ทำงานได้ตามที่คาดไว้
เนื่องจากทั้งคู่เป็นสำเนาตื้นทำไมจึงdict.copy()ไม่ทำงานตามที่ฉันคาดไว้ หรือความเข้าใจของฉันเกี่ยวกับการทำสำเนาแบบตื้นและลึกนั้นมีข้อบกพร่อง
![ภาพประกอบของ 'a = b': 'a' และ 'b' ทั้งคู่ชี้ไปที่ '{1: L}', 'L' ชี้ไปที่ '[1, 2, 3]'](https://i.stack.imgur.com/4AQC6.png)
![ภาพประกอบของ 'b = a.copy ()': 'a' ชี้ไปที่ '{1: L}', 'b' ชี้ไปที่ '{1: M}', 'L' และ 'M' ชี้ไปที่ '[ 1, 2, 3] '](https://i.stack.imgur.com/Vtk4m.png)
![ภาพประกอบของ 'b = copy.deepcopy (a)': 'a' ชี้ไปที่ '{1: L}', 'L' ชี้ไปที่ '[1, 2, 3]'; 'b' ชี้ไปที่ '{1: M}', 'M' ชี้ไปที่อินสแตนซ์อื่นของ '[1, 2, 3]'](https://i.stack.imgur.com/BO4qO.png)