有时候,在开发当中,想对一个table进行相关的操作,但是操作完之后能够不对原本的table产生修改,这时候就需要对table进行一个拷贝,然后使用这个拷贝的table进行相关的操作。
直接对table进行等号赋值,那是不行的,这样拿到的还是原本table的引用,修改时会把原本table的值一起修改:
所以这时候就需要对table进行深拷贝
function DeepCopy(tmp)
if nil == tmp then return nil end
local res = {}
for key, val in pairs(tmp) do
if type(val) == "table" then
res[key] = DeepCopy(val)
else
res[key] = v
end
end
return res
end
local a = { }
a.num = 1
local b = DeepCopy(a)
b.num = 3
print(a.num)
这样得到的结果就是1了,拷贝后修改的值不影响原本的table。