पायथन को कॉपी करें (डीप कॉपी और उथली कॉपी)

| | | |

कभी-कभी एक कॉपी की आवश्यकता होती है ताकि आप एक कॉपी को बिना दूसरी को बदले बदल सकें। पायथन में कॉपी बनाने के दो तरीके हैं:

  • डीप कॉपी
  • उथली कॉपी

इन कॉपी को बनाने के लिए हम का इस्तेमाल करते हैं। कॉपी मॉड्यूल। हम उथले और गहरी प्रतिलिपि संचालन के लिए प्रतिलिपि मॉड्यूल का उपयोग करते हैं। उदाहरण के लिए


# इम्पोर्ट कॉपी मॉड्यूल

इम्पोर्ट कोड> <कोड वर्ग = "सादा"> प्रतिलिपि


वर्ग = "सादा"> li1 <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> [ <कोड वर्ग = "मान"> 1 <कोड वर्ग = "सादा">, <कोड वर्ग = "मान"> 2 <कोड वर्ग = "सादा">, [ <कोड वर्ग = "मान"> 3 < /कोड> <कोड वर्ग = "सादा">, <कोड वर्ग = "मान"> 5 <कोड वर्ग = "सादा">], <कोड वर्ग = "मान" > 4 <कोड वर्ग = "सादा">]


<कोड वर्ग = "टिप्पणियां"> # उथली प्रतिलिपि के लिए प्रतिलिपि का उपयोग करें

li2 = co py.copy ( li1)


# Deepcopy के लिए Deepcopy का इस्तेमाल

li3 < /कोड> <कोड वर्ग = "के" yword"> = <कोड वर्ग = "सादा"> copy.deepcopy (li1)

उपरोक्त कोड में, < कोड>कॉपी () सूची की एक उथली कॉपी देता है, और <कोड>डीपकॉपी () सूची की एक डीप कॉपी देता है।

डीपकॉपी

डीप कॉपी — यह एक ऐसी प्रक्रिया है जिसमें प्रतिलिपि बनाने की प्रक्रिया बार-बार होती है। इसका मतलब है कि पहले एक नया संग्रह ऑब्जेक्ट बनाना और फिर मूल में पाए जाने वाले चाइल्ड ऑब्जेक्ट्स की प्रतियों के साथ इसे पुनरावर्ती रूप से भरना। डीप कॉपी के मामले में, किसी ऑब्जेक्ट की कॉपी को किसी अन्य ऑब्जेक्ट पर कॉपी किया जाता है। इसका मतलब है कि ऑब्जेक्ट की कॉपी में किए गए कोई भी परिवर्तन मूल ऑब्जेक्ट में प्रतिबिंबित नहीं होते हैं । पायथन में यह डीपकॉपी () फ़ंक्शन का उपयोग करके किया जाता है।


# कॉपी ऑपरेशन प्रदर्शित करने के लिए पायथन कोड

कोड>


<कोड वर्ग = "टिप्पणियां"> # आयात & quot; कॉपी & quot; कॉपी ऑपरेशन के लिए

import copy


# इनिशियलाइज़िंग लिस्ट 1

li1 = < कोड वर्ग = "सादा"> [ <कोड वर्ग = "मान"> 1 <कोड वर्ग = "सादा">, <कोड वर्ग = "मान"> 2 <कोड वर्ग = "सादा">, [ <कोड वर्ग = "मान"> 3 <कोड वर्ग = "सादा">, <कोड वर्ग = "मान"> 5 <कोड वर्ग = "सादा">], <कोड वर्ग = "मान"> 4 <कोड वर्ग = "सादा">]


# डीपकॉपी से डीप कॉपी करने के लिए

li2 = copy.deepcopy (li1)


# मूल सूची आइटम

<कोड वर्ग = "कार्य"> प्रिंट <कोड वर्ग = "सादा"> ( < कोड वर्ग = "स्ट्रिंग"> "डीप कॉपी करने से पहले मूल तत्व" <कोड वर्ग = "सादा">)

के लिए कोड> <कोड वर्ग = "सादा"> मैं <कोड वर्ग = "कीवर्ड"> में <कोड वर्ग = "कार्य"> श्रेणी <कोड वर्ग = "सादा"> ( <कोड वर्ग = "मान"> 0 <कोड वर्ग = "सादा">, <कोड वर्ग = "कार्य"> लेन <कोड वर्ग = "सादा" > (li1)):

Print (li1 [i], end < कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "स्ट्रिंग"> " " <कोड वर्ग = "सादा">)

<कोड वर्ग = "अपरिभाषित रिक्त स्थान">

प्रिंट <कोड वर्ग ="सादा "> ( " " )


# नई सूची में जोड़ें और आइटम

<कोड वर्ग = "सादा"> li2 [ <कोड वर्ग = "मान"> 2 <कोड वर्ग = "सादा">] [ <कोड वर्ग = "मान"> 0 <कोड वर्ग = "सादा">] <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "मान"> 7


# परिवर्तन l2 में दिखाई देता है

Print <कोड वर्ग = "सादा"> ( "डीप कॉपी करने के बाद तत्वों की नई सूची" )

for i in श्रेणी <कोड वर्ग = "सादा"> ( <कोड वर्ग = "मान"> 0 <कोड वर्ग = "सादा">, < कोड क्लास = "फ़ंक्शंस"> लेन <कोड क्लास =" प्लेन "> (li1)):

<कोड क्लास = "कीवर्ड"> प्रिंट < कोड वर्ग = "सादा"> (li2 [i], अंत <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "स्ट्रिंग"> "" <कोड वर्ग = " प्लेन">)


<कोड वर्ग = "कीवर्ड"> p rint <कोड वर्ग = "सादा"> ( "" )


# चेंज है मूल सूची में प्रतिबिंबित नहीं
# एक गहरी प्रतिलिपि की तरह

प्रिंट <कोड वर्ग = "सादा"> ( <कोड वर्ग = "स्ट्रिंग"> "गहरी प्रतिलिपि के बाद मूल तत्व" <कोड वर्ग = "सादा">)

<कोड वर्ग = "कीवर्ड"> i in श्रेणी <कोड वर्ग = "सादा"> ( <कोड वर्ग = "मान"> 0 <कोड वर्ग = "सादा">, <कोड वर्ग = "कार्य "> लेन <कोड वर्ग = "सादा"> (li1)):

<कोड वर्ग = "कार्य"> प्रिंट <कोड वर्ग = "सादा" "> (li1 [i], अंत = "" )

बाहर निकलें:

मूल तत्व डी डीप कॉपी करने से पहले 1 2 [3, 5] 4 डीप कॉपी करने के बाद तत्वों की नई सूची 1 2 [7, 5] 4 डीप कॉपी करने के बाद मूल तत्व 1 2 [3, 5] 4 

इन उपरोक्त उदाहरण, सूची में किए गए परिवर्तन ने अन्य सूचियों को प्रभावित नहीं किया , जो गहरी प्रतिलिपि सूची को दर्शाता है।

उथली कॉपी

उथली प्रतिलिपि का अर्थ है एक नई संग्रह वस्तु बनाना और फिर उसमें पाई गई बाल वस्तुओं के संदर्भ में उसे भरना मूल रूप में। प्रतिलिपि प्रक्रिया स्वयं को दोहराती नहीं है और इसलिए स्वयं बच्चे की वस्तुओं की प्रतियां नहीं बनाती है। उथली प्रतिलिपि के मामले में, किसी वस्तु के संदर्भ को किसी अन्य वस्तु पर कॉपी किया जाता है। इसका मतलब है कि ऑब्जेक्ट की कॉपी में किए गए कोई भी परिवर्तन मूल ऑब्जेक्ट में दिखाई देते हैं । पायथन इसे "कॉपी () " फ़ंक्शन के साथ करता है।


<टेबल बॉर्डर = " 0 "सेलपैडिंग =" 0 "सेलस्पेसिंग =" 0 ">

# Python कोड कॉपी ऑपरेशंस को प्रदर्शित करने के लिए


# आयात & quot; कॉपी & quot; कॉपी ऑपरेशन के लिए

import copy


# इनिशियलाइज़िंग लिस्ट 1

li1 = < कोड वर्ग = "सादा"> [ <कोड वर्ग = "मान"> 1 <कोड वर्ग = "सादा">, <कोड वर्ग = "मान"> 2 <कोड वर्ग = "सादा">, [ <कोड वर्ग = "मान"> 3 <कोड वर्ग = "सादा">, <कोड वर्ग = "मान"> 5 <कोड वर्ग = "सादा">], <कोड वर्ग = "मान"> 4 <कोड वर्ग = "सादा">]


# उथली कॉपी के लिए कॉपी का इस्तेमाल करें

li2 = copy.copy (li1)


# मूल सूची आइटम

<कोड वर्ग = "कीवर्ड"> प्रिंट <कोड वर्ग = "pl ऐन"> ( <कोड वर्ग ss ="string ">" उथली प्रतिलिपि बनाने से पहले के मूल तत्व " )

<कोड वर्ग = "सादा"> मैं <कोड वर्ग = "कीवर्ड"> में <कोड वर्ग = "कार्य"> श्रेणी <कोड वर्ग = "सादा"> (< /कोड> <कोड वर्ग = "मान"> 0 <कोड वर्ग = "सादा">, <कोड वर्ग = "कार्य"> लेन <कोड वर्ग = "सादा"> (li1)):

Print (li1 [i], end = <कोड क्लास = "स्ट्रिंग"> "" <कोड क्लास = "प्लेन">)


<कोड वर्ग = "कीवर्ड"> प्रिंट <कोड वर्ग = "सादा"> ( <कोड वर्ग = "स्ट्रिंग"> "" <कोड वर्ग = "सादा">)


<कोड वर्ग = "टिप्पणियां"> # नई सूची में जोड़ें और आइटम

<कोड वर्ग = "सादा"> li2 [ <कोड वर्ग = "मान"> 2 <कोड वर्ग = "सादा">] [ <कोड वर्ग = "मान"> 0 <कोड वर्ग = "pl ऐन">] <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "मान"> 7

<पी>
<कोड वर्ग = "टिप्पणियां" "> # जांचें कि क्या परिवर्तन परिलक्षित होता है

Print ( "उथली नकल के बाद मूल तत्व" )

के लिए < कोड वर्ग = "सादा"> मैं <कोड वर्ग = "कीवर्ड"> में <कोड वर्ग = "कार्य"> श्रेणी <कोड वर्ग = "सादा"> ( <कोड वर्ग = "मान"> 0 <कोड वर्ग = "सादा">, <कोड वर्ग = "कार्य"> लेन <कोड वर्ग = "सादा"> (li1 )):

Print (li1 [i], end = <कोड क्लास ="स्ट्रिंग ">" " <कोड क्लास =" प्लेन ">)

tbody>

बाहर निकलें:

उथली नकल करने से पहले के मूल तत्व 1 2 [3, 5] 4 उथली नकल के बाद मूल तत्व 1 2 [7, 5] 4 

उपरोक्त उदाहरण में, सूची में किया गया परिवर्तन है एक अन्य सूची पर प्रभावी हुआ, यह दर्शाता है कि सूची की प्रतिलिपि बनाई गई थी।

महत्वपूर्ण बिंदु:
उथली और गहरी प्रतियों के बीच का अंतर केवल मिश्रित वस्तुओं पर लागू होता है (ऐसी वस्तुएं जिनमें अन्य ऑब्जेक्ट, जैसे कि सूचियाँ या क्लास इंस्टेंस):

  • उथली कॉपी एक नई मिश्रित वस्तु बनाती है और फिर (जहाँ तक संभव हो) मूल में पाई गई वस्तुओं के संदर्भ सम्मिलित करती है।
  • एक गहरी प्रतिलिपि एक नई यौगिक वस्तु बनाती है और फिर उसमें मूल में मिली वस्तुओं की प्रतियों को पुन: सम्मिलित करती है।