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

Learn Python in Marathi Part 6 Copy Lists

आज आपण पायथॉन मध्ये एका यादी (लिस्ट) ची (कॉपी) प्रतिलिपी/प्रतिकृती/ नक्कल कशा रीतीने केली जाते ते पाहू.   पायथॉन मध्ये = या चिन्हाचा वापर करून आपण त्याची एक नक्कल (Copy) बनवू शकतो. ही नक्कल (dynamic) सक्रीय असते, म्हणजे एकदा नक्कल करून झाल्यावर जर मूळ यादी (सुचि) मध्ये काही बदल केल्यास लगेचच तिच्या नकलेमध्ये त्याचे प्रतिबिंब दिसते. इतकेच नाही तर नकलेमध्ये काही बदल केल्यास त्याचे प्रतिबिंब मूळ प्रतीमध्ये पडलेले दिसून येते.

आपण याचे एक उदाहरण पाहू

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

आता आपण या यादीची एक नक्कल बनवू


शालो कॉपी


Cities2 = Cities

या ठिकाणी आपण Cities2 या नावाने एक नक्कल बनवली आहे. तर Cities ही आपली मूळ यादी आहे. अपन दोन्ही याद्यां मधे काय आहे हे पाहू.

खरे पहिले तर वरील कमांड मुळे Cities या यादीला Cities2 हे अजून एक नाव दिले गेले आहे. येथे दोन लिस्ट्स बनवले गेले नाहीत. तर एकाच लिस्ट ला दोन नावे दिली गेली आहेत. यामुळे याला शालो कॉपी असे संबोधतात.

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

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

दोन्ही मधे सारखीच नावे आहेत. आता आपण मूळ यादीच्या नकले मध्ये एक नवीन नाव जोडू

Cities2.append('Kolkata')

आता Cities2 या यादी मध्ये आपल्याला चार नावे दिसतील

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

या ठिकाणी आपण मूळ यादी Cities ला अजून स्पर्श केला नाही. तरीही आपण Cities यादी मध्ये काय दिसते ते एकदा तपासून पाहू

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


येथे चार नावे दिसतात. म्हणजे प्रती मध्ये केलेला बदल मूळ यादी मध्ये दिसू लागला. आता आपण मूळ यादीत बदल करून पाहू

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

या ठिकाणी यादीत अजून एक नाव जोडले गेले. आपण आता Cities2 उघडून पाहू  

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


तर मूळ यादी मध्ये केलेला बदल हा लगेचच त्याच्या प्रतीमध्ये देखील दिसून येतो. तर अशा रीतीने पायथॉन मध्ये याद्यांची प्रतिकृती ही (dynamic) सक्रीय असते आणि एका यादीत केलेला बदल हा आपोआप दुसऱ्या यादीत पण झालेला दिसतो

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) मेथड ने बनवता येते

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']


तर अशा रीतीने डीप कॉपीचा वापर केला जातो. डीप कॉपी ही मेथड सिंपल लिस्ट, कंपाउंड लिस्ट किंवा नेस्टेड लिस्ट ची कॉपी बनवण्यासाठी वापरली जाते.


यापुढील लेख