मैं copy
बनाम deepcopy
प्रति मॉड्यूल में अंतर को समझता हूं । मैंने सफलतापूर्वक उपयोग किया है copy.copy
और copy.deepcopy
पहले भी किया है , लेकिन यह पहली बार है जब मैं वास्तव में ओवरलोडिंग __copy__
और __deepcopy__
तरीकों के बारे में गया हूं । मैं पहले से ही चारों ओर Google पर और के माध्यम से देखा है में निर्मित अजगर मॉड्यूल के उदाहरण देखने के लिए __copy__
और __deepcopy__
कार्यों (उदाहरण के लिए sets.py
, decimal.py
और fractions.py
), लेकिन मैं अभी भी नहीं 100% यकीन है कि मैं यह सही मिल गया है।
यहाँ मेरा परिदृश्य है:
मेरे पास एक कॉन्फ़िगरेशन ऑब्जेक्ट है। प्रारंभ में, मैं मानों के डिफ़ॉल्ट सेट के साथ एक कॉन्फ़िगरेशन ऑब्जेक्ट को इंस्टेंट करने जा रहा हूं। यह कॉन्फ़िगरेशन कई अन्य ऑब्जेक्ट्स को सौंपा जाएगा (यह सुनिश्चित करने के लिए कि सभी ऑब्जेक्ट एक ही कॉन्फ़िगरेशन से शुरू हों)। हालांकि, एक बार उपयोगकर्ता के बातचीत शुरू होने के बाद, प्रत्येक ऑब्जेक्ट को एक-दूसरे के कॉन्फ़िगरेशन को प्रभावित किए बिना स्वतंत्र रूप से इसके कॉन्फ़िगरेशन को ट्विस्ट करने की आवश्यकता होती है (जो मुझे कहता है कि मुझे अपने प्रारंभिक कॉन्फ़िगरेशन के डीपकोप बनाने के लिए चारों ओर हाथ करने की आवश्यकता होगी)।
यहाँ एक नमूना वस्तु है:
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
मुझे उचित व्यवहार दे सकता है?