Python में Shallow Copy बनाम Deep Copy
अनचाहे डेटा रूपांतरण से बचने के लिए शैलो और डीप कॉपी के अंतर को समझना महत्वपूर्ण है।
- शैलो कॉपी सूची के केवल टॉप-लेवल तत्वों को कॉपी करती है और सूची के भीतर नेस्टेड सूचियों या म्यूटेबल ऑब्जेक्ट्स को प्रभावित नहीं करती जो उन्हीं ऑब्जेक्ट्स को संदर्भित करते हैं। म्यूटेबल ऑब्जेक्ट्स में किए गए बदलाव मूल और कॉपी दोनों सूचियों को प्रभावित करेंगे।
- डीप कॉपी सभी तत्वों को, जिनमें नेस्टेड सूचियाँ और म्यूटेबल ऑब्जेक्ट्स शामिल हैं, पुनरावर्ती रूप से कॉपी करती है और स्वतंत्र प्रतियाँ बनाती है। कॉपी की गई सूची में नेस्टेड ऑब्जेक्ट्स में किए गए बदलावों का असर मूल सूची पर नहीं पड़ेगा।
मैं शैलो कॉपी के लिए copy.copy() फ़ंक्शन और डीप कॉपी के लिए copy.deepcopy() फ़ंक्शन उपयोग करने की सलाह देता हूँ।
|
विधि |
Shallow Copy |
Deep Copy |
|
copy() |
✓ |
✗ |
|
list() constructor |
✓ |
✗ |
|
List slicing [:] |
✓ |
✗ |
|
copy.copy() |
✓ |
✗ |
|
copy.deepcopy() |
✗ |
✓ |
Python में Nested List को कैसे कॉपी करें
नेस्टेड सूचियों या जटिल डेटा स्ट्रक्चर के साथ काम करते समय, अधिक परिष्कृत सूची कॉपी करने की विधियाँ आवश्यक होती हैं। आइए नेस्टेड सूचियों को सँभालने की विभिन्न तकनीकों पर नज़र डालें।
copy.copy() का उपयोग
copy मॉड्यूल copy() फ़ंक्शन प्रदान करता है जो सूची की शैलो कॉपी बनाता है। copy() फ़ंक्शन list() constructor या सूची slicing [:] की तुलना में अधिक स्पष्ट है। जब आप पठनीयता के लिए स्पष्ट रूप से शैलो कॉपी बनाना बताना चाहें, तब इस विधि का उपयोग कर सकते हैं।
नीचे दिया उदाहरण दिखाता है कि नेस्टेड सूची की शैलो कॉपी कैसे करें। कोड [1, 2, [99, 4]] प्रिंट करेगा क्योंकि नेस्टेड सूची अब भी वही ऑब्जेक्ट है।
# Import the copy module to access the copy.copy() function
import copy
# Original list with nested structure
original_list = [1, 2, [3, 4]]
# Create a shallow copy using copy.copy()
shallow_copied_list = copy.copy(original_list)
# Modifying the nested list in the copied list
shallow_copied_list[2][0] = 99
print(original_list)
[1, 2, [99, 4]]
copy.deepcopy() का उपयोग
deepcopy() फ़ंक्शन भी copy मॉड्यूल में उपलब्ध है। यह फ़ंक्शन सूची की डीप कॉपी बनाता है, यानी सूची स्वयं और उसके सभी नेस्टेड ऑब्जेक्ट्स की प्रतियाँ तैयार करता है। deepcopy() फ़ंक्शन म्यूटेबल ऑब्जेक्ट्स वाली सूचियों के साथ काम करते समय महत्वपूर्ण है, क्योंकि यह सुनिश्चित करता है कि कॉपी की गई सूचियों में बदलावों का असर मूल सूची पर न पड़े।
नीचे दिया कोड [1, 2, [3, 4]] प्रिंट करता है।
# Import the copy module to access the copy.deepcopy() function
import copy
# Original list with nested structure
original_list = [1, 2, [3, 4]]
# Create a deep copy using copy.deepcopy()
deep_copied_list = copy.deepcopy(original_list)
# Modifying the nested list in the copied list
deep_copied_list[2][0] = 99
print(original_list)
[1, 2, [3, 4]]
निष्कर्ष
Python में सूचियों को कॉपी करना समझना कुशल डेटा प्रबंधन के लिए महत्वपूर्ण है। इस ट्यूटोरियल में, हमने Python में सूची कॉपी करने की अलग-अलग विधियाँ सीखीं और शैलो तथा डीप कॉपी के बीच कुछ अंतर भी देखे। एक डेटा विश्लेषक के रूप में, अपनी विशिष्ट आवश्यकताओं के आधार पर उपयुक्त सूची कॉपी तकनीक चुनना ज़रूरी है। मैं आपको सुझाता हूँ कि यहाँ बताई गई विधियों का अभ्यास करें ताकि उनके उपयोग-परिदृश्यों को बेहतर ढंग से समझ सकें।
DataCamp का Python Programming स्किल ट्रैक करें और बेहतरीन तकनीकों के साथ अपने प्रोग्रामिंग कौशल को आगे बढ़ाएँ। साथ ही, हमारे Python Developer और Data Analyst with Python करियर ट्रैक्स भी देखें, जो आपको व्यावहारिक, नौकरी-उन्मुख कौशल लगातार बनाने में मदद करेंगे।

डेटा एनालिटिक्स, बिज़नेस इंटेलिजेंस और डेटा साइंस में व्यावहारिक अनुभव रखने वाला डेटा साइंस तकनीकी लेखक। मैं SQL, Python, Power BI, Databricks और डेटा इंजीनियरिंग पर व्यावहारिक, उद्योग-केंद्रित सामग्री लिखता/लिखती हूँ, जो वास्तविक दुनिया की एनालिटिक्स कार्य से जुड़ी होती है। मेरी लेखनी तकनीकी गहराई और व्यावसायिक प्रभाव के बीच पुल का काम करती है, जिससे पेशेवरों को डेटा को आत्मविश्वासपूर्ण निर्णयों में बदलने में मदद मिलती है.
अक्सर पूछे जाने वाले प्रश्न
शैलो कॉपी और डीप कॉपी में क्या अंतर है?
शैलो कॉपी विधि एक नई सूची बनाती है लेकिन उसे मूल सूची वाले ही मानों के संदर्भ से जोड़ती है, जिससे कॉपी की गई सूची के ऑब्जेक्ट्स में बदलाव का असर मूल सूची पर पड़ता है। डीप कॉपी एक नई सूची बनाती है और मूल सूची से मानों को पुनरावर्ती रूप से डालती है, इसलिए कॉपी की गई सूची के नेस्टेड ऑब्जेक्ट्स में बदलाव का असर मूल सूची पर नहीं पड़ता।
Python में शैलो कॉपी बनाने के तरीके क्या हैं?
आप copy() मेथड, सूची slicing [:], list() constructor, या copy मॉड्यूल के copy() फ़ंक्शन का उपयोग करके सूची की शैलो कॉपी बना सकते हैं।
Python में सूची की डीप कॉपी कैसे बनाते हैं?
आप copy मॉड्यूल के deepcopy() फ़ंक्शन का उपयोग करके सूची की डीप कॉपी बना सकते हैं।
Python की lists शक्तिशाली डेटा स्ट्रक्चर हैं जिनका उपयोग आइटम्स के संग्रह को संग्रहीत करने के लिए किया जाता है। सूची कॉपी करने की विधि डेटा सँभालते समय महत्वपूर्ण है, क्योंकि यह डुप्लिकेट सूची पर कार्य करते हुए मूल सूची को सुरक्षित रखने में मदद करती है। इस ट्यूटोरियल में, मैं व्यावहारिक उदाहरणों के साथ सूचियों को कॉपी करने की बुनियादी और उन्नत तकनीकों को समझाऊँगा।
अलग-अलग उदाहरणों में जाने से पहले, मैं DataCamp का Introduction to Python कोर्स करने की सलाह देता हूँ, ताकि आप Python की बुनियादें सीख सकें, जिनमें विभिन्न Python data structures शामिल हैं। Python Cheat Sheet for Beginners भी अलग-अलग फ़ंक्शन्स और मेथड्स देखने के लिए उपयोगी रहेगा।
"कॉपी मशीन का उपयोग करता हुआ Python।" चित्र: Dall-E.
त्वरित उत्तर: Python में सूची को कैसे कॉपी करें
नीचे दिया गया उदाहरण
copy()मेथड का उपयोग करके Python में सूची कॉपी करना दिखाता है। ध्यान दें कि डुप्लिकेट सूची में बदलाव करने पर भी मूल सूची अपरिवर्तित रहती है। कोड[1, 2, 3]प्रिंट करेगा।Python में सूची कॉपी करने की और तकनीकें
अलग-अलग तकनीकें देखने से पहले, समझते हैं कि हम असाइनमेंट ऑपरेटर
=का उपयोग क्यों नहीं करते। हम=इसलिए नहीं उपयोग करते क्योंकि यह वास्तव में हमारी सूची की कॉपी नहीं बनाता। असाइनमेंट ऑपरेटर सिर्फ हमारी सूची का एक संदर्भ (reference) बनाता है।निम्न उदाहरण में, असाइनमेंट के बाद
original_listऔरreference_to_original_listएक ही सूची को संदर्भित करते हैं।यहाँ, डुप्लिकेट सूची में किए गए किसी भी बदलाव का असर मूल सूची पर पड़ेगा और इसके विपरीत भी। ऐसा इसलिए होता है क्योंकि दोनों सूचियाँ एक ही मेमोरी में संग्रहीत होती हैं। अब, आइए वास्तव में सूची की कॉपी बनाने के अलग-अलग तरीकों को देखें।
copy() मेथड का उपयोग
copy()मेथड एक इनबिल्ट मेथड है जो सूची की शैलो कॉपी बनाता है।copy()मेथड Python 3.3 से उपलब्ध है। यह मेथड केवल टॉप-लेवल सूची संरचना को कॉपी करता है।copy()मेथड का सिंटैक्स नीचे दिया गया है।निम्न उदाहरण में, कोड
[1, 2, 3, 4]प्रिंट करेगा।list() constructor का उपयोग
list()constructor मौजूदा सूची से एक नई सूची बनाता है ताकि मूल सूची के सभी तत्व शामिल हो जाएँ। यह तकनीक तब उपयोगी है जब आपको एक नया सूची ऑब्जेक्ट चाहिए, जहाँ कॉपी की गई सूची में बदलावों का असर मूल सूची पर न पड़े। नीचे दिया गया कोड[1, 2, 3]प्रिंट करता है।[:] के साथ सूची slicing का उपयोग
सूची slicing
[:]शैलो कॉपी बनाने का संक्षिप्त तरीका है। यह तरीका कुशल है क्योंकि यह Python में लो-लेवल पर लागू किया गया है। नीचे इस विधि का सिंटैक्स है।निम्न कोड
[1, 2, 3]प्रिंट करता है।इस संदर्भ में, हम सूची slicing का उपयोग सूची की हर चीज़ को शामिल करने के लिए करते हैं, लेकिन अन्य संदर्भों में, slicing का उपयोग प्रारंभ और अंत इंडेक्स बताकर उप-सूचियाँ बनाने के लिए किया जा सकता है।