RosettaCodeData/Task/Deepcopy/Lua/deepcopy-1.lua

26 lines
386 B
Lua

function _deepcopy(o, tables)
if type(o) ~= 'table' then
return o
end
if tables[o] ~= nil then
return tables[o]
end
local new_o = {}
tables[o] = new_o
for k, v in next, o, nil do
local new_k = _deepcopy(k, tables)
local new_v = _deepcopy(v, tables)
new_o[new_k] = new_v
end
return new_o
end
function deepcopy(o)
return _deepcopy(o, {})
end