Lua Table 踩坑(一)表操作为引用(存在深浅拷贝),基本类型直接复制

我们看这样一段代码

local dict={name='humorchen'}
local name=dict.name
name='chen'
print(dict.name)

按照我们的平常思路来,那么程序执行结果是?

当然,就是你想的那样,dict.name还是 'humorchen'

那么我再几行代码,你来猜猜结果是什么

local dict={}
dict['humorchen']={age=21,qq='3301633914'}
local humorchen=dict['humorchen']
humorchen.qq='10086'
print(dict['humorchen'].qq)

按照平常思路来,我改变的是humorchen这个表的内容,跟原来的dict表没有关系,所以qq应该还是原来的没有变动

而结果却是打印的 '10086'

既然table对象的操作是采用的指针,并没有重新建立一份副本,那么我们再这样操作

local dict={}
dict['humorchen']={age=21,qq='3301633914'}
local humorchen=dict['humorchen']
humorchen.qq='10086'
humorchen=nil
print(dict['humorchen'].qq)

现在将指向dict['humorchen']的表humorchen指向nil,请问dict['humorchen']会不会被影响呢?

不会,影响的是humorchen变为了nil,而dict['humorchen']他还是原来那个他。不理解可以想想C语言的指针

posted @ 2020-07-06 09:47  HumorChen99  阅读(0)  评论(0编辑  收藏  举报  来源