浅拷贝:这种就是直接把内存地址给了shadow_copy,两个表共享内存,改shadow_copy和orig都会改变表orig的值。
深拷贝:这种是递归复制表元素,两个表相互独立不受影响。深拷贝的代码就是另开了个数组,把orig的值穿进去
这是跟值类型和引用类型的原理比较相似
-- 原表
local orig = {
name = "John",
age = 30,
languages = {"Java", "Python"}
}
-- 浅拷贝
local shallow_copy = orig
shallow_copy.name = "Mary"
print(orig.name) -- "Mary",原表被修改
-- 深拷贝
local deep_copy = {}
for k,v in pairs(orig) do
if type(v) == "table" then
deep_copy[k] = {}
for k2, v2 in pairs(v) do
deep_copy[k][k2] = v2
end
else
deep_copy[k] = v
end
end
deep_copy.name = "Tom"
print(orig.name) -- "John",原表未被修改