Lua 拷贝

Lua 拷贝

主要分为两类:浅拷贝、深拷贝

浅拷贝

使用赋值运算符 =,就是浅拷贝,有两种情况

1.拷贝对象是基本的值类型,如string、number、boolean等,赋值时,会创建一个新对象,修改拷贝的值不会影响原来的值

2.拷贝的对象是table时,相当于直接进行引用,指向同一个内存地址,修改新对象的值会影响原来的值

深拷贝

由于Lua没有提供api,需要封装函数,通过递归遍历table拷贝对应数据

lua 复制代码
function deepCopy(object)
    local lookup_table = {}
    local function _copy(object)
        if type(object) ~= "table" then
            return object
        elseif lookup_table[object] then
            return lookup_table[object]
        end

        local new_table = {}
        lookup_table[object] = new_table
        for key, value in pairs(object) do
            new_table[_copy(key)] = _copy(value)
        end
        return setmetatable(new_table, getmetatable(object))
    end

    return _copy(object)
end


-- test
local deepCopyTest1 = {a = 1, b = 2, c = 3}
local deepCopyTest2 = deepCopy(deepCopyTest1)
deepCopyTest2.b = 99
print(deepCopyTest1.b)
-- 2
相关推荐
weisian15117 小时前
JVM--2-打破刻板印象:在Java中创建一个对象,一定是分配到堆内存吗?
java·开发语言·jvm·tlab·逃逸分析·标量替换
心语星光17 小时前
用python语言的pyautogui库实现伪批量将xdf文件打印为pdf文件
开发语言·python·pdf·自动化
cyforkk17 小时前
10、Java 基础硬核复习:多线程(并发核心)的核心逻辑与面试考点
java·开发语言·面试
2301_8223827617 小时前
嵌入式C++实时内核
开发语言·c++·算法
Max_uuc17 小时前
【C++ 硬核】拒绝单位混淆:利用 Phantom Types (幻影类型) 实现零开销的物理量安全计算
开发语言·c++
Remember_99317 小时前
Java 工厂方法模式:解耦对象创建的优雅方案
java·开发语言·python·算法·工厂方法模式
2301_7903009617 小时前
C++与物联网开发
开发语言·c++·算法
A懿轩A17 小时前
【Java 基础编程】Java 运算符完全指南:算术/关系/逻辑/位运算与优先级,避免常见坑
java·开发语言
专注echarts研发20年17 小时前
如何实现 QLabel 的 Click 事件?Qt 富文本超链接优雅方案
开发语言·qt
时艰.17 小时前
Java 并发编程核心知识点
java·开发语言