--深度复制lua对象
function DeepCopy(tab)
local lookupTable = {} --防止表中某个字段指向自己,最终陷入死递归
local function inner_copy(obj)
if type(obj) ~= "table" then
return obj
elseif lookupTable[obj] then
return lookupTable[obj]
end
local newTab = {}
lookupTable[obj] = newTab
for k,v in pairs(obj) do
newTab[inner_copy(k)] = inner_copy(v)
end
return setmetatable(newTab, inner_copy(getmetatable(obj)))
end
return inner_copy(tab)
end