lua深拷贝与浅拷贝
·
浅拷贝复制对象本身和它的外部引用类型数据的引用,如果原始对象中的某些数据是引用类型数据,那它们指向的是同一块内存地址,无论哪个对象修改它的值,另一个对象的值也会相应修改
深拷贝是完全复制一个对象的所有数据,包括里面的引用数据和嵌套对象。新对象和原对象的数据在内存中完全独立,如果有引用类型数据,深拷贝会递归复制里面的数据,确保没有任何数据共享
浅拷贝:可以直接复制的数据类型有:nil,boolean,number,string。
nil,bolean,number为值类型,副本不会影响原数据
string是基本数据类型,但是它的值无法改变,拷贝后会创建新的副本
function也是基本数据类型,但是function是无法更改的,因此无论多少个变量对其有引用都无所谓
浅拷贝的实现:用pairs遍历每个键值对,赋值给一个新的表即可,可以先判断是不是table如果不是则直接返回即可,对于基本数据类型这等于浅拷贝
深拷贝的实现:如果是不是表就直接赋值,遇到table就新建一个table,然后递归赋值,已经赋值的用seen记录
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)