Saturday 15 September 2012

python - What exactly is the difference between shallow copy, deepcopy and normal assignment operation? -


  आयात कॉपी एक = एक "???? ???? B = 1,2,3,4 c = [1,2,3,4] d = {1: 10,2: 20,3: 30} a1 = copy.copy (ए) बी 1 = copy.copy (बी ) C1 = copy.copy (c) d1 = copy.copy (डी) प्रिंट "अपरिवर्तनीय - आईडी (ए) == आईडी (ए 1)", आईडी (ए) == आईडी (ए 1) प्रिंट "अपरिवर्तनीय - आईडी (बी) ) == आईडी (बी 1) ", आईडी (बी) == आईडी (बी 1) प्रिंट" अस्थिर- आईडी (सी) == आईडी (सी 1) ", आईडी (सी) == आईडी (सी 1) प्रिंट" अस्थिर-आईडी (डी) == आईडी (डी 1) ", आईडी (डी) == आईडी (डी 1)   

मुझे निम्नलिखित परिणाम मिलते हैं -

  अपरिवर्तनीय - आईडी (ए) == आईडी (ए 1) सच अपरिवर्तनीय - आईडी (बी) == आईडी (बी 1) सच में परिवर्तन - आईडी (सी) == आईडी (सी 1) गलत परिवर्तन - आईडी (डी) == आईडी (डी 1) गलत   

अगर मैं गहरी कॉपी करता हूं -

  a1 = copy.deepcopy (a) b1 = copy.deepcopy (b) c1 = copy.deepcopy (c) D1 = copy.deepcopy (d)   

परिणाम समान हैं -

  अपरिवर्तनीय - id (a) == id (a1) सच अपरिवर्तनीय आईडी (बी) == आईडी (बी 1) सच म्यूटिव - आईडी (सी) == आईडी (सी 1) गलत परिवर्तन - आईडी (डी) == आईडी (डी 1) गलत   

अगर मैं काम करता हूँ असाइनमेंट परिचालन पर -

  a1 = a b1 = b c1 = c d1 = d   

तब परिणाम हैं -

  अपरिवर्तनीय - आईडी (ए) == आईडी (ए 1) सही अपरिवर्तनीय - आईडी (बी) == आईडी (बी 1) सच में परिवर्तन योग्य - आईडी (सी) == आईडी (सी 1) सच म्यूटिव - आईडी (डी) == आईडी (डी 1) सच है   

क्या कोई समझ सकता है कि प्रतियों के बीच क्या अंतर है? क्या यह अस्थिर और amp से संबंधित है; अपरिवर्तनीय वस्तुओं? यदि हां, तो क्या आप कृपया मुझे समझाएं?

सामान्य असाइनमेंट ऑपरेशन केवल नए चर की ओर इंगित करेगा मौजूदा ऑब्जेक्ट उथले और गहरी प्रतियों के बीच का अंतर समझाएं:

उथले और गहरी प्रतिलिपि के बीच का अंतर केवल यौगिक ऑब्जेक्ट्स (ऑब्जेक्ट जिसमें सूचियों या क्लास इंस्टेंसेस जैसे अन्य ऑब्जेक्ट होते हैं) के लिए ही प्रासंगिक है:

  • एक उथले प्रतिलिपि एक नए मिश्रित वस्तु का निर्माण करती है और फिर (यथासंभव) मूल में मिली वस्तुओं को संदर्भ सम्मिलित करता है।

  • < P> एक गहरी प्रतिलिपि एक नए मिश्रित वस्तु का निर्माण करती है और फिर, पुनरावर्ती रूप से, मूल में मिली वस्तुओं में प्रतियां सम्मिलित करती है।

    यहाँ थोड़ा सा प्रदर्शन है :

      आयात कॉपी = a = [1, 2, 3] b = [4, 5, 6] c = [a, b]   

    का उपयोग करना प्रतिलिपि करने के लिए सामान्य असाइनमेंट ऑपरेटरों:

      d = c प्रिंट आईडी (सी) == आईडी (डी) # ट्रू-डी सी प्रिंट आईडी (सी [0]) के समान वस्तु है == आईडी [डी] [0] = Copy.copy (सी) प्रिंट आईडी (सी) == आईडी (डी) # False - d अब एक नया ओजी है सीटी प्रिंट आईडी (सी [0]) == आईडी (डी [0]) # ट्रू-डी [0] सी [0]   

    के रूप में एक ही वस्तु है एक गहरी प्रतिलिपि का प्रयोग करना:

      d = copy.deepcopy (c) प्रिंट आईडी (c) == id (d) # ग़लत- d अब एक नया ऑब्जेक्ट प्रिंट आईडी (c [0]) == आईडी ( D [0]) # झूठी - घ [0] अब एक नया ऑब्जेक्ट है    

  • No comments:

    Post a Comment