बुधवार, 20 दिसंबर 2017

Learn Python in Hindi Part 6 Copy Lists

आज हम पायथॉन में एक सूचि (लिस्ट) को किस प्रकार (कॉपी) अनुकृत या प्रतिकृत किया जाता है यह देखेंगे.  पायथॉन में = इस चिन्ह का प्रयोग कर के हम एक सूचि की अनुकृति या प्रतिकृति बना सकते हैं. लेकिन यह   अनुकृति या प्रतिकृति (dynamic) सक्रीय होती है न की निष्क्रिय. याने एक बार प्रतिकृति बनाने पर किसी भी एक सूचि में हम कोई भी परिवर्तन करेंगे तो वह दूसरी सूचि में भी तत्क्षण अविर्भूत होता है


हम इसका एक उदहारण देखें

Cities = ['Mumbai', 'Pune', 'Nagpur']


अब इस सूचि की प्रतिलिपि बनाने के लिए एक दुसरे नाम का प्रयोग किया जाए

Cities2 = Cities

इस पद्धति से किसी भी सूचि की प्रतिलिपि निर्मित की जा सकती है. अब हम इन सूचियों के अन्तरंग को देखेंगे.

असल में यहाँ दो लिस्ट्स नहीं हैं. एक ही लिस्ट को दो नाम दिए गए हैं. इसलिए जब हम किसी एक लिस्ट में चेंज करते हैं तब दुसरे नाम से खोलने पर वही लिस्ट हमें दिख जाती है. इसीको शायद शालो कॉपी कहा जाता है

print(Cities)
['Mumbai', 'Pune', 'Nagpur']

print(Cities2)
['Mumbai', 'Pune', 'Nagpur']

अब इसका मनोरंजक भाग आता है. हम किसी भी एक सूचि में कुछ परिवर्तन कर के देखेंगे

Cities2.append('Kolkata')

अब हम Cities2 इस सूचि को प्रकट कर के देखें

print(Cities2)
['Mumbai', 'Pune', 'Nagpur', 'Kolkata']

यहाँ पर हमें ने केवल Cities2 इस सूचि में परिवर्तन किया है. हमने मूल सूचि Cities में कोई चेष्टा पूर्वक कोई परिवर्तन नहीं किया है. अब हम Cities इस मूल सूचि को प्रकट कर के देखें

print(Cities)
['Mumbai', 'Pune', 'Nagpur', 'Kolkata']

यहाँ पर हमें यह प्रदर्शित होता हैं की सूचि की प्रतिलिपि में परिवर्तन होने पर उसकी मूल सूचि में भी तत्क्षण वह परिवर्तन आविर्भूत हुआ.

इसी प्रकार से हम अब मूल सूचि में कुछ परिवर्तन कर के देखेंगे

Cities.insert(3,'Singapore')
print(Cities)
['Mumbai', 'Pune', 'Nagpur', 'Singapore', 'Kolkata']

अब हम देखें की Cities में परिवर्तन करने के बाद Cities2 इस प्रतिलिपि में क्या कोई परिवर्तन हुआ है ? 

print(Cities2)
['Mumbai', 'Pune', 'Nagpur', 'Singapore', 'Kolkata']


निश्चित ही. पायथॉन की सूचियों की प्रतिलिपि = इस चिन्ह के प्रयोग से निर्मित करने पर, दोनों सूचियाँ एक दुसरे के साथ इस तरह जुड़ जाती हैं की एक सूचि में परिवर्तन होने पर वह तत्क्षण दूसरी सूचि में भी अविर्भूत होता है.


Copy with Slice [:] स्लाइस से कॉपी 

किन्तु पायथॉन में एक सूचि (लिस्ट) बनाने का यह एकमात्र मार्ग नहीं है. हम Slice  स्लाइस [:] इस चिन्ह का प्रयोग कर सकते है. इसे कैसे किया जाता है यह देखेंगे 

प्रथमत: हम एक नयी सूचि बनायेंगे

Cities = ['Mumbai','Bangalore','Delhi','Kolkata']

अब मैं सूचि (लिस्ट) की प्रतिलिपि निर्मित करते समय  स्लाइस [:] का प्रयोग करूँगा

Cities2 = Cities[:]

अब हम Cities2 को प्रकट कर के देखेंगे

print(Cities2)
['Mumbai', 'Bangalore', 'Delhi', 'Kolkata']

अब हम  Cities2 इस सूचि से एक नाम हटा कर देखेंगे 

Cities2.remove('Mumbai')
print(Cities2)
['Bangalore', 'Delhi', 'Kolkata']

अब देखें क्या मूल सूचि में कुछ परिवर्तन हुआ है ?

print(Cities)
['Mumbai', 'Bangalore', 'Delhi', 'Kolkata']

नहीं मूल सूचि में कोई परिवर्तन नहीं हुआ है. अब हम मूल सूचि में एक नाम जोड़ कर देखेंगे

Cities.append("Rangoon")
print(Cities)
['Mumbai', 'Bangalore', 'Delhi', 'Kolkata', 'Rangoon']
print(Cities2)
['Bangalore', 'Delhi', 'Kolkata']

जैसा की आप ऊपर देख सकते हैं, स्लाइस (slice) चिन्ह का प्रयोग करने पर सुचियोंकी जो प्रतिलिपि बनती है वह स्वतंत्र होती है और एक सूची में किये गए परिवर्तन का दूसरी सूची पर कोई प्रभाव नहीं पड़ता.

यहाँ पर हमने स्लाइस मेथड का इस्तेमाल लिस्ट की कॉपी करने के लिए किया. लेकिन स्लाइस के इस्तेमाल से कंपाउंड या नेस्टेड लिस्ट्स इस तरह से कॉपी नहीं किये जाते, इसके लिए डीप कॉपी (deepcopy) ये मेथड इस्तेमाल की जाती है

deepcopy डीप कॉपी

जब हम = इस ऑपरेटर का इस्तेमाल करते हैं तब असल में एक ही लिस्ट को एक और नया नाम दिया जाता है.  इसे शालो कॉपी कहा जता है. लेकिन असल में कॉपी होती है वो (deepcopy) मेथड से

from copy import deepcopy

इसके लिए  पायथॉन शेल में आपको उपरी सेंटेंस लिखना होगा. अब हम डीप कॉपी के इस्तेमाल से कॉपी बनाकर उसे टेस्ट करेंगे.

cities = ['Mumbai','Pune',['Vadnagar','Surat','Jamnagar'], 'Delhi']
cities2 = deepcopy(cities)
print(cities)
['Mumbai', 'Pune', ['Vadnagar', 'Surat', 'Jamnagar'], 'Delhi']
print(cities2)
['Mumbai', 'Pune', ['Vadnagar', 'Surat', 'Jamnagar'], 'Delhi']

cities2.insert(2,'Gujarat')
print(cities2)
['Mumbai', 'Pune', 'Gujarat', ['Vadnagar', 'Surat', 'Jamnagar'], 'Delhi']
print(cities)
['Mumbai', 'Pune', ['Vadnagar', 'Surat', 'Jamnagar'], 'Delhi']

cities.remove(['Vadnagar', 'Surat', 'Jamnagar'])
print(cities)
['Mumbai', 'Pune', 'Delhi']
print(cities2)
['Mumbai', 'Pune', 'Gujarat', ['Vadnagar', 'Surat', 'Jamnagar'], 'Delhi']


तो इस तरह से दीप कॉपी का इस्तेमाल किसी लिस्ट की, सिंपल लिस्ट, कंपाउंड लिस्ट या नेस्टेड लिस्ट की कॉपी करने के लिए किया जाता है

आगे पढ़िए 


Learn Python in Hindi - Dictionaries