Lua Academy · पाठ

गहरी और उथली कॉपी

पुनरावर्ती गहरी कॉपी लागू करें और संदर्भ के अर्थ को समझें।

पाठ 3, कुल 4 में से13 चरण

गहरी और उथली कॉपी, CoddyKit पर Lua Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Lua Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

Lua में संदर्भ शब्दार्थ

Lua में किसी तालिका को दूसरे चर में असाइन करने पर डेटा नहीं, बल्कि संदर्भ कॉपी होता है। दोनों चर उसी तालिका की ओर संकेत करते हैं।

local a = {1, 2, 3}
local b = a
b[1] = 99
print(a[1])  -- 99, a is affected!

उथली कॉपी

उथली कॉपी समान शीर्ष-स्तरीय कुंजियों और मानों वाली नई तालिका बनाती है। नेस्टेड तालिकाएँ अभी भी साझा रहती हैं।

local function shallowCopy(t)
  local copy = {}
  for k, v in pairs(t) do copy[k] = v end
  return copy
end

उथली कॉपी की सीमा

उथली कॉपी में नेस्टेड तालिका को बदलने से मूल तालिका प्रभावित होती है।

local orig = {data = {1, 2, 3}}
local sc = shallowCopy(orig)
sc.data[1] = 99
print(orig.data[1])  -- 99 (shared!)

पुनरावृत्ति द्वारा गहरी कॉपी

गहरी कॉपी प्रत्येक नेस्टेड तालिका की पुनरावर्ती रूप से प्रतिलिपि बनाती है और सभी साझा संदर्भों को अलग कर देती है।

local function deepCopy(orig)
  local copy
  if type(orig) == "table" then
    copy = {}
    for k, v in pairs(orig) do
      copy[deepCopy(k)] = deepCopy(v)
    end
    setmetatable(copy, getmetatable(orig))
  else
    copy = orig
  end
  return copy
end

गहरी कॉपी का प्रयोग

गहरी कॉपी के बाद कॉपी में नेस्टेड तालिकाओं को बदलने से मूल तालिका अप्रभावित रहती है।

local orig = {data = {1, 2, 3}}
local dc = deepCopy(orig)
dc.data[1] = 99
print(orig.data[1])  -- 1 (independent!)

चक्रों को संभालना

भोली गहरी कॉपी चक्रीय तालिकाओं पर विफल हो जाती है। चक्रों को संभालने के लिए देखी जा चुकी तालिकाओं का रिकॉर्ड एक मेमो तालिका में रखिए।

local function deepCopyMemo(orig, memo)
  memo = memo or {}
  if type(orig) ~= "table" then return orig end
  if memo[orig] then return memo[orig] end
  local copy = {}
  memo[orig] = copy
  for k, v in pairs(orig) do
    copy[deepCopyMemo(k, memo)] = deepCopyMemo(v, memo)
  end
  setmetatable(copy, getmetatable(orig))
  return copy
end

मेटाटेबल कॉपी करना

OOP व्यवहार बनाए रखने के लिए गहरी कॉपी में मेटाटेबल भी setmetatable(copy, getmetatable(orig)) के माध्यम से स्थानांतरित की जानी चाहिए।

table.move से उथली कॉपी

क्रमिक सारणियों के लिए तेज़ उथली क्लोन table.move से बनाई जा सकती है।

local function arrayCopy(t)
  return table.move(t, 1, #t, 1, {})
end

किसे कब उपयोग करें

  • उथली: सरल सपाट तालिकाएँ, प्रदर्शन-आवश्यक क्लोनिंग।
  • गहरी: नेस्टेड संरचनाएँ, क्रमांकन, अपरिवर्तनीय स्नैपशॉट।

फ़ंक्शन मान

फ़ंक्शन कभी कॉपी नहीं किए जाते — उथली और गहरी, दोनों कॉपी एक ही फ़ंक्शन संदर्भ साझा करती हैं। सामान्यतः यही वांछित व्यवहार होता है।

प्रदर्शन संबंधी विचार

नोड की संख्या के अनुसार गहरी कॉपी O(n) होती है। बहुत बड़े ट्री के लिए इसके बजाय संरचनात्मक साझाकरण या कॉपी-ऑन-राइट पैटर्न पर विचार कीजिए।

कॉपी प्रकार प्रश्न

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

पुनरावृत्ति: गहरी बनाम उथली कॉपी

उथली कॉपी केवल शीर्ष-स्तरीय कुंजियों की प्रतिलिपि बनाती है; नेस्टेड तालिकाएँ साझा रहती हैं। गहरी कॉपी हर चीज़ की पुनरावर्ती प्रतिलिपि बनाती है। अनंत पुनरावृत्ति रोकने के लिए चक्रों को मेमो तालिका से संभालिए।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Lua सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
40
पाठ
159

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

क्या “गहरी और उथली कॉपी” पाठ निःशुल्क है?

हाँ — Lua Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “गहरी और उथली कॉपी” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“गहरी और उथली कॉपी” में मैं क्या सीखूँगा?

पुनरावर्ती गहरी कॉपी लागू करें और संदर्भ के अर्थ को समझें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Lua Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Lua Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Lua Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“गहरी और उथली कॉपी” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Lua Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Lua Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. तुलनाकर्ताओं के साथ table.sort
  2. table.concat और table.move
  3. गहरी और उथली कॉपी
  4. टेबल रूपांतरण: map, filter, reduce
← Lua Academy पर वापस जाएँ