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
相关推荐
算法如诗1 分钟前
**MATLAB R2025a** 环境下,基于 **双向时间卷积网络(BITCN)+ 双向长短期记忆网络(BiLSTM)** 的多特征分类预测完整实现
开发语言·网络·matlab
k09333 分钟前
在组件外(.js文件)中使用pinia的方法2--在http.js中使用pinia
开发语言·javascript·http
二川bro17 分钟前
第44节:物理引擎进阶:Bullet.js集成与高级物理模拟
开发语言·javascript·ecmascript
中文Python20 分钟前
小白中文Python-双色球LSTM模型出号程序
开发语言·人工智能·python·lstm·中文python·小白学python
越努力越幸运50822 分钟前
JavaScript进阶篇垃圾回收、闭包、函数提升、剩余参数、展开运算符、对象解构
开发语言·javascript
czhc114007566322 分钟前
C# 1116 流程控制 常量
开发语言·c#
程序定小飞1 小时前
基于springboot的汽车资讯网站开发与实现
java·开发语言·spring boot·后端·spring
大米粥哥哥1 小时前
Qt 使用QAMQP连接RabbitMQ
开发语言·qt·rabbitmq·qamqp
yivifu2 小时前
精益求精,支持处理嵌套表格的Word表格转HTML表格
开发语言·c#·word
沐知全栈开发2 小时前
PHP MySQL WHERE 子句详解
开发语言