"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > उथली प्रतिलिपि बनाम गहरी प्रतिलिपि - वे वास्तव में क्या हैं? - जावास्क्रिप्ट और पायथन के साथ उदाहरण

उथली प्रतिलिपि बनाम गहरी प्रतिलिपि - वे वास्तव में क्या हैं? - जावास्क्रिप्ट और पायथन के साथ उदाहरण

2024-08-31 को प्रकाशित
ब्राउज़ करें:402

परिचय

प्रोग्रामिंग दुनिया में, डेटा कॉपी करना एक आम काम है। हालाँकि, सभी प्रतियाँ समान नहीं बनाई गई हैं। दो शब्द जो अक्सर दिखाई देते हैं वे हैं शैलो कॉपी और डीप कॉपी। उन त्रुटियों से बचने के लिए उनके बीच अंतर को समझना महत्वपूर्ण है जिनका पता लगाना मुश्किल हो सकता है।

शैलो कॉपी क्या है?

एक उथली प्रतिलिपि किसी वस्तु के केवल पहले स्तर की प्रतिलिपि बनाती है, मूल डेटा के संदर्भ को गहरे स्तर पर छोड़ देती है। इसका मतलब यह है कि यदि मूल वस्तु के अंदर (नेस्टेड) ​​अन्य वस्तुएं हैं, तो उथली प्रतिलिपि केवल उन वस्तुओं के संदर्भों की प्रतिलिपि बनाएगी, वस्तुओं की नहीं।

जावास्क्रिप्ट में उदाहरण

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!)

बख्शीश:

उथली या गहरी प्रतिलिपि के बीच निर्णय लेने से पहले हमेशा जांच लें कि आपके ऑब्जेक्ट में नेस्टेड स्तर हैं या नहीं।

जावास्क्रिप्ट में प्रतियां बनाने के लिए उपकरण और कार्य

शैलो कॉपी के लिए object.assign() का उपयोग करना

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)

कॉपी.कॉपी() और कॉपी.डीपकॉपी() के बीच अंतर

  • copy.copy(): उथली प्रतिलिपि।
  • कॉपी.डीपकॉपी(): डीप कॉपी।

टिप्पणी:

पायथन में, कभी-कभी आपको अपनी सूचियों में आकस्मिक परिवर्तनों से बचने के लिए एक उथली प्रतिलिपि की आवश्यकता होती है!

सार और निष्कर्ष

संक्षेप में, उथली प्रतियों और गहरी प्रतियों दोनों के अपने उपयोग हैं। मुख्य बात यह है कि आप जिस डेटा के साथ काम कर रहे हैं उसकी संरचना को समझें और उचित प्रतिलिपि विधि चुनें।

पूछे जाने वाले प्रश्न

1. क्या उथली प्रतिलिपि हमेशा गहरी प्रतिलिपि से तेज़ होती है?

हां, क्योंकि यह कम डेटा कॉपी करता है।

2. क्या आप जावास्क्रिप्ट में बाहरी पुस्तकालयों के बिना एक गहरी प्रतिलिपि बना सकते हैं?

हां, JSON.parse(JSON.stringify()) या स्ट्रक्चर्डक्लोन() के साथ।

3. यदि मैं उथली प्रतिलिपि में निहित किसी ऑब्जेक्ट को संशोधित करने का प्रयास करता हूं तो क्या होता है?

मूल वस्तु भी प्रभावित होगी।

4. क्या समस्याओं से बचने के लिए हमेशा डीप कॉपी का उपयोग करना बेहतर है?

जरूरी नहीं, केवल तभी जब आप जटिल डेटा संरचनाओं के साथ काम करते हैं।

5. जावास्क्रिप्ट में अन्य डीप कॉपी विधियों की तुलना में स्ट्रक्चर्डक्लोन() के क्या फायदे हैं?

यह मूल है, गोलाकार संरचनाओं का समर्थन करता है और JSON.parse(JSON.stringify()) की तुलना में अधिक कुशल है, साथ ही मानों को एक ऑब्जेक्ट से दूसरे ऑब्जेक्ट में पूरी तरह से स्थानांतरित करने की अनुमति देता है।


गहरी प्रतियों के बजाय उथली प्रतियों का उपयोग करते समय गलतियाँ आपके विचार से कहीं अधिक सामान्य हैं! मुझे आशा है कि यह छोटी सी मार्गदर्शिका आपको डेटा कॉपी करते समय किसी भी समस्या से बचने में मदद करेगी।

मुझे टिप्पणियों में बताएं, क्या आप पहले से ही गहरी और उथली प्रतियों के बारे में जानते हैं और क्या आपको कभी उनके कारण कोई समस्या हुई है?


Shallow Copy vs Deep Copy - ¿Qué son realmente? - Ejemplos con JavaScript y Python

BYXN की नोटबुक? | सबस्टैक

मेरी सार्वजनिक नोटबुक! ???. BYXN की नोटबुक?, एक सबस्टैक प्रकाशन पढ़ने के लिए क्लिक करें। 17 दिन पहले लॉन्च किया गया.

Shallow Copy vs Deep Copy - ¿Qué son realmente? - Ejemplos con JavaScript y Python bhyxen.substack.com

अनस्प्लैश पर मोहम्मद रहमानी द्वारा फोटो

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/bhyxen/shallow-copy-vs- Deep-copy-que-son-realmente-ejemplos-con-javascript-y-python-10ja?1 यदि कोई उल्लंघन है , कृपया स्टडी_गोलंग @163.कॉमडिलीट से संपर्क करें
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3