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
endSığ 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
endUygulamada 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
endMeta 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, {})
endHer 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
- Karşılaştırıcılarla table.sort
- table.concat ve table.move
- Derin Kopya ve Sığ Kopya
- Tabloları Dönüştürme: map, filter, reduce