प्रोग्रामिंग दुनिया में, डेटा कॉपी करना एक आम काम है। हालाँकि, सभी प्रतियाँ समान नहीं बनाई गई हैं। दो शब्द जो अक्सर दिखाई देते हैं वे हैं शैलो कॉपी और डीप कॉपी। उन त्रुटियों से बचने के लिए उनके बीच अंतर को समझना महत्वपूर्ण है जिनका पता लगाना मुश्किल हो सकता है।
एक उथली प्रतिलिपि किसी वस्तु के केवल पहले स्तर की प्रतिलिपि बनाती है, मूल डेटा के संदर्भ को गहरे स्तर पर छोड़ देती है। इसका मतलब यह है कि यदि मूल वस्तु के अंदर (नेस्टेड) अन्य वस्तुएं हैं, तो उथली प्रतिलिपि केवल उन वस्तुओं के संदर्भों की प्रतिलिपि बनाएगी, वस्तुओं की नहीं।
const originalArray = [1, 2, [3, 4]]; const shallowCopy = originalArray.slice(); shallowCopy[2][0] = 99; console.log(originalArray); // [1, 2, [99, 4]] console.log(shallowCopy); // [1, 2, [99, 4]]
import copy original_list = [1, 2, [3, 4]] shallow_copy = copy.copy(original_list) shallow_copy[2][0] = 99 print(original_list) # [1, 2, [99, 4]] print(shallow_copy) # [1, 2, [99, 4]]
एक उथली प्रतिलिपि तब उपयोगी होती है जब आप जानते हैं कि आपको नेस्टेड ऑब्जेक्ट को संशोधित करने की आवश्यकता नहीं है। यह तेज़ है और डीप कॉपी की तुलना में कम मेमोरी खपत करता है।
जावास्क्रिप्ट में, यदि आप Array.slice() या object.assign() का उपयोग करते हैं, तो आप उथली प्रतिलिपि बना रहे हैं!
एक डीप कॉपी किसी ऑब्जेक्ट के सभी स्तरों की प्रतिलिपि बनाता है, यहां तक कि नेस्टेड संरचनाओं की भी नकल करता है। इसका मतलब यह है कि कॉपी में किया गया कोई भी बदलाव मूल वस्तु को प्रभावित नहीं करेगा।
const originalArray = [1, 2, [3, 4]]; const deepCopy = JSON.parse(JSON.stringify(originalArray)); deepCopy[2][0] = 99; console.log(originalArray); // [1, 2, [3, 4]] console.log(deepCopy); // [1, 2, [99, 4]]
import copy original_list = [1, 2, [3, 4]] deep_copy = copy.deepcopy(original_list) deep_copy[2][0] = 99 print(original_list) # [1, 2, [3, 4]] print(deep_copy) # [1, 2, [99, 4]]
यदि आप जटिल या नेस्टेड डेटा संरचनाओं के साथ काम कर रहे हैं, तो अवांछित दुष्प्रभावों से बचने के लिए डीप कॉपी सबसे सुरक्षित विकल्प है।
पायथन में, जब आपको जटिल वस्तुओं को सुरक्षित रूप से डुप्लिकेट करने की आवश्यकता होती है तो कॉपी.डीपकॉपी() आपका मित्र होता है।
यहां उथली प्रतिलिपि और गहरी प्रतिलिपि के बीच सीधी तुलना है:
विशेषता | उथली प्रतिलिपि | डीप कॉपी |
---|---|---|
उथली प्रतिलिपि | हाँ | नहीं |
डीप कॉपी | नहीं | हाँ |
मूल ऑब्जेक्ट में संशोधन प्रतिलिपि को प्रभावित करते हैं | हाँ | नहीं |
जटिलता | कम | उच्च |
याद रखें, एक उथली प्रतिलिपि तेज़ होती है, लेकिन जटिल वस्तुओं के साथ काम करते समय एक गहरी प्रतिलिपि अधिक सुरक्षित होती है।
हल्के एप्लिकेशन सेटिंग्स या अस्थायी डेटा की नकल करने के लिए उथली प्रतियां बहुत अच्छी होती हैं!
जब डेटा नेस्ट किया जाता है तो गहरी कॉपी के बजाय उथली कॉपी का उपयोग करना एक सामान्य गलती है। इससे मूल वस्तु में अवांछित संशोधन हो सकते हैं।
const originalArray = [1, 2, [3, 4]]; const shallowCopy = originalArray.slice(); shallowCopy[2][0] = 99; console.log(originalArray); // [1, 2, [99, 4]] (¡No esperado!)
उथली या गहरी प्रतिलिपि के बीच निर्णय लेने से पहले हमेशा जांच लें कि आपके ऑब्जेक्ट में नेस्टेड स्तर हैं या नहीं।
const originalObject = { a: 1, b: { c: 2 } }; const shallowCopy = Object.assign({}, originalObject);
const originalArray = [1, 2, 3]; const shallowCopy = [...originalArray];
const originalObject = { a: 1, b: { c: 2 } }; const deepCopy = structuredClone(originalObject);
structuredClone() आपका दिमाग खराब किए बिना जटिल या गोलाकार संरचनाओं की नकल करने के लिए एकदम सही है।
const _ = require('lodash'); const originalObject = { a: 1, b: { c: 2 } }; const deepCopy = _.cloneDeep(originalObject);
import copy original_list = [1, 2, [3, 4]] shallow_copy = copy.copy(original_list) deep_copy = copy.deepcopy(original_list)
पायथन में, कभी-कभी आपको अपनी सूचियों में आकस्मिक परिवर्तनों से बचने के लिए एक उथली प्रतिलिपि की आवश्यकता होती है!
संक्षेप में, उथली प्रतियों और गहरी प्रतियों दोनों के अपने उपयोग हैं। मुख्य बात यह है कि आप जिस डेटा के साथ काम कर रहे हैं उसकी संरचना को समझें और उचित प्रतिलिपि विधि चुनें।
हां, क्योंकि यह कम डेटा कॉपी करता है।
हां, JSON.parse(JSON.stringify()) या स्ट्रक्चर्डक्लोन() के साथ।
मूल वस्तु भी प्रभावित होगी।
जरूरी नहीं, केवल तभी जब आप जटिल डेटा संरचनाओं के साथ काम करते हैं।
यह मूल है, गोलाकार संरचनाओं का समर्थन करता है और JSON.parse(JSON.stringify()) की तुलना में अधिक कुशल है, साथ ही मानों को एक ऑब्जेक्ट से दूसरे ऑब्जेक्ट में पूरी तरह से स्थानांतरित करने की अनुमति देता है।
गहरी प्रतियों के बजाय उथली प्रतियों का उपयोग करते समय गलतियाँ आपके विचार से कहीं अधिक सामान्य हैं! मुझे आशा है कि यह छोटी सी मार्गदर्शिका आपको डेटा कॉपी करते समय किसी भी समस्या से बचने में मदद करेगी।
मुझे टिप्पणियों में बताएं, क्या आप पहले से ही गहरी और उथली प्रतियों के बारे में जानते हैं और क्या आपको कभी उनके कारण कोई समस्या हुई है?
अनस्प्लैश पर मोहम्मद रहमानी द्वारा फोटो
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3