ฉันเข้าใจความแตกต่างระหว่างcopy
เทียบกับdeepcopy
ในโมดูลการคัดลอก ฉันเคยใช้มาก่อนcopy.copy
และcopy.deepcopy
ประสบความสำเร็จ แต่นี่เป็นครั้งแรกที่ฉันได้ใช้งาน__copy__
และ__deepcopy__
วิธีการมากเกินไป ฉัน Googled แล้วรอบ ๆ และมองผ่านโมดูลในตัวงูหลามที่จะมองหาอินสแตนซ์ของ__copy__
และ__deepcopy__
ฟังก์ชั่น (เช่นsets.py
, decimal.py
และfractions.py
) แต่ฉันยังคงไม่แน่ใจ 100% ผมเคยได้มันขวา
นี่คือสถานการณ์ของฉัน:
ฉันมีวัตถุการกำหนดค่า ในขั้นต้นฉันจะสร้างอินสแตนซ์วัตถุการกำหนดค่าหนึ่งรายการด้วยชุดค่าเริ่มต้น การกำหนดค่านี้จะถูกส่งต่อไปยังวัตถุอื่น ๆ หลายรายการ (เพื่อให้แน่ใจว่าวัตถุทั้งหมดเริ่มต้นด้วยการกำหนดค่าเดียวกัน) อย่างไรก็ตามเมื่อการโต้ตอบกับผู้ใช้เริ่มต้นขึ้นแต่ละออบเจ็กต์จะต้องปรับแต่งการกำหนดค่าโดยอิสระโดยไม่ส่งผลกระทบต่อการกำหนดค่าของกันและกัน (ซึ่งบอกว่าฉันจะต้องสร้าง deepcopys ของการกำหนดค่าเริ่มต้นของฉันเพื่อส่งต่อ)
นี่คือวัตถุตัวอย่าง:
class ChartConfig(object):
def __init__(self):
#Drawing properties (Booleans/strings)
self.antialiased = None
self.plot_style = None
self.plot_title = None
self.autoscale = None
#X axis properties (strings/ints)
self.xaxis_title = None
self.xaxis_tick_rotation = None
self.xaxis_tick_align = None
#Y axis properties (strings/ints)
self.yaxis_title = None
self.yaxis_tick_rotation = None
self.yaxis_tick_align = None
#A list of non-primitive objects
self.trace_configs = []
def __copy__(self):
pass
def __deepcopy__(self, memo):
pass
อะไรคือวิธีที่ถูกต้องในการใช้copy
และdeepcopy
วิธีการกับวัตถุนี้เพื่อให้แน่ใจcopy.copy
และcopy.deepcopy
ให้พฤติกรรมที่เหมาะสมแก่ฉัน