博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lua深拷贝一个table
阅读量:1984 次
发布时间:2019-04-27

本文共 600 字,大约阅读时间需要 2 分钟。

当我们把一个table赋值给一个对象a的时候,其实是把引用赋值给它,所以我们改变这个对象a,其实等价于改变了table本身。我们想要完全得到一个table的副本的话,就需要进行深拷贝。

-- table深拷贝接口function DeepCopy(t)    if nil == t then return nil end    local res = {
} for k,v in pairs(t) do if 'table' == type(v) then res[k] = DeepCopy(v) else res[k] = v end return resend

-- 构造一个tablelocal a = {
name = 'linxinfa', hobby = 'guitar'}-- 深拷贝a,赋值给blocal b = DeepCopy(a)-- 修改b,并不影响a本身b.hobby = 'basketball'print(a.hobby) -- 输出guitar-- a赋值给c,其实c就等价于a,是a的引用local c = a-- 修改c,等价于直接修改了ac.hobby = 'basketball'print(a.hobby) -- 输出basketball

转载地址:http://vjkvf.baihongyu.com/

你可能感兴趣的文章
Python干货:表达式 i += x 与 i = i + x 等价吗?
查看>>
有了这些 Chrome 插件,效率提升10倍(建议收藏)
查看>>
Python 编码错误的本质原因
查看>>
Python 开发者都会遇到的错误:UnboundLocalError
查看>>
用 Python 送“爱心”
查看>>
理解HTTPS为什么安全前,先看看这些东西
查看>>
最通俗易懂地解释:正向代理与反向代理
查看>>
代码这样写不止于优雅(Python版)
查看>>
一份来自掘金社区的开发者报告
查看>>
Python是怎么火起来的
查看>>
一本书搞定Python入门到实践
查看>>
20-40k+期权,蚂蚁金服招 Python 开发工程师
查看>>
2017半年文章合集(建议收藏)
查看>>
简析 __init__、__new__、__call__ 方法
查看>>
程序员如何优雅地写公众号
查看>>
@classmethod与@staticmethod的区别
查看>>
只有1%的程序员搞懂过浮点数陷阱
查看>>
衡量代码质量的唯一有效标准:WTF/min
查看>>
一个网络请求的历险之旅
查看>>
Google 为什么把几十亿行代码放在一个库
查看>>