--深度拷贝Table

function DeepCopy(obj)

local InTable = {};

local function Func(obj)

if type(obj) ~= "table" then --判断表中是否有表

return obj;

end

local NewTable = {}; --定义一个新表

InTable[obj] = NewTable; --若表中有表,则先把表给InTable,再用NewTable去接收内嵌的表

for k,v in pairs(obj) do --把旧表的key和Value赋给新表

NewTable[Func(k)] = Func(v);

end

return setmetatable(NewTable, getmetatable(obj))--赋值元表

end

return Func(obj) --若表中有表,则把内嵌的表也复制了

end

 

注意如果里面有字段是指向自己的,需要单独拿出,不然会死循环

 

相关阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。