0Pricing
Lua Academy · Ders

Derin Kopya ve Sığ Kopya

Özyinelemeli derin kopya uygulayın ve başvuru anlambilimini anlayın.

Derin Kopya ve Sığ Kopya, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.

Lua'da Başvuru Anlamları

Lua'da bir tabloyu başka bir değişkene atamak verileri değil, başvuruyu kopyalar. Her iki değişken de aynı tabloyu gösterir.

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

Sığ Kopya

Sığ kopya, aynı üst düzey anahtar ve değerlere sahip yeni bir tablo oluşturur. İç içe tablolar yine paylaşılır.

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

Sığ Kopyanın Sınırlaması

Sığ kopyadaki iç içe bir tabloyu değiştirmek özgün tabloyu da etkiler.

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

Özyinelemeyle Derin Kopya

Derin kopya, iç içe geçmiş her tabloyu özyinelemeli olarak çoğaltır ve tüm paylaşılan başvuruları koparır.

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

Uygulamada Derin Kopya

Derin kopyadan sonra kopyadaki iç içe tabloları değiştirmek özgün tabloyu etkilemez.

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

Döngüleri Ele Alma

Saf derin kopya, döngüsel tablolarda bozulur. Döngüleri ele almak için ziyaret edilen tabloları bir anı tablosunda izleyin.

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

Meta Tabloları Kopyalama

Nesne yönelimli programlama davranışını korumak için derin kopya, setmetatable(copy, getmetatable(orig)) aracılığıyla meta tabloyu da aktarmalıdır.

table.move ile Sığ Kopya

Sıralı diziler için hızlı bir sığ klon table.move kullanılarak oluşturulabilir.

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

Her Birini Ne Zaman Kullanmalı?

  • Sığ: basit düz tablolar ve performans açısından kritik klonlama.
  • Derin: iç içe yapılar, serileştirme ve değişmez anlık görüntüler.

İşlev Değerleri

İşlevler hiçbir zaman kopyalanmaz; hem sığ hem de derin kopya aynı işlev başvurusunu paylaşır. Genellikle istenen davranış budur.

Performansla İlgili Hususlar

Derin kopyanın maliyeti düğüm sayısına göre O(n)'dir. Çok büyük ağaçlar için bunun yerine yapısal paylaşımı veya kopyala-yazma kalıplarını değerlendirin.

Kopya Türü Sorusu

Sığ kopyadan sonra kopyadaki iç içe bir tabloyu değiştirdiğinizde ne olur?

Özet: Derin ve Sığ Kopya

Sığ kopya yalnızca üst düzey anahtarları çoğaltır; iç içe tablolar paylaşılır. Derin kopya her şeyi özyinelemeli olarak çoğaltır. Sonsuz özyinelemeyi önlemek için döngüleri bir anı tablosuyla ele alın.

Sıkça Sorulan Sorular

“Derin Kopya ve Sığ Kopya” dersi ücretsiz mi?

Evet — “Derin Kopya ve Sığ Kopya” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.

“Derin Kopya ve Sığ Kopya” dersinde ne öğreneceğim?

Özyinelemeli derin kopya uygulayın ve başvuru anlambilimini anlayın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Lua Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Derin Kopya ve Sığ Kopya” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Karşılaştırıcılarla table.sort
  2. table.concat ve table.move
  3. Derin Kopya ve Sığ Kopya
  4. Tabloları Dönüştürme: map, filter, reduce
← Lua Academy Sayfasına Dön