function deepcopy(orig) local orig_type = type(orig) local copy if orig_type == 'table' then -- tableなら再帰でコピー copy = {} for orig_key, orig_value in next, orig, nil do copy[deepcopy(orig_key)] = deepcopy(orig_value) end setmetatable(copy, deepcopy(getmetatable(orig))) else -- number, string, booleanなどはそのままコピー copy = orig end return copy end