20 lines
		
	
	
	
		
			592 B
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			20 lines
		
	
	
	
		
			592 B
		
	
	
	
		
			Lua
		
	
	
	
	
	
function deepcopy(orig, copies)
 | 
						|
    copies = copies or {}
 | 
						|
    local orig_type = type(orig)
 | 
						|
    local copy
 | 
						|
    if orig_type == 'table' then
 | 
						|
        if copies[orig] then
 | 
						|
            copy = copies[orig]
 | 
						|
        else
 | 
						|
            copy = {}
 | 
						|
            copies[orig] = copy
 | 
						|
            for orig_key, orig_value in next, orig, nil do
 | 
						|
                copy[deepcopy(orig_key, copies)] = deepcopy(orig_value, copies)
 | 
						|
            end
 | 
						|
            setmetatable(copy, deepcopy(getmetatable(orig), copies))
 | 
						|
        end
 | 
						|
    else -- number, string, boolean, etc
 | 
						|
        copy = orig
 | 
						|
    end
 | 
						|
    return copy
 | 
						|
end
 |