Lazy loaded image
算法&语言基础
🗒️值引用问题
字数 509阅读时长 2 分钟
2021-7-2
2024-10-15
type
status
date
slug
summary
tags
category
icon
password
记录一次奇怪的问题 以下代码是已经修改后正确的代码
这段代码在运行时出现了一个问题,从断点观察时listData的值非常正常,但是在走完第二次循环的值时发现listData中的key为1和2的值变成一样的了,在多次修改调式时候发现这里是一个很容易忽视的具体问题——值的引用关系:
在这段代码中,有一些潜在的值引用问题。在第9行,我将activeCommonConfig设置为v1,这意味着activeCommonConfigv1引用相同的内存地址。然后,我更改了activeCommonConfig.info.data的值,这实际上更改了v1.info.data的值,因为它们引用相同的内存地址。这可能会导致意外的行为,因为您可能不希望更改v1的值。
同样,在第13行,我将activeCommonConfig的值插入到listData中,这意味着listData中的元素和activeCommonConfig引用相同的内存地址。然后,您更改了activeCommonConfig.info.money的值,这实际上更改了listData中相应元素的info.money的值,因为它们引用相同的内存地址。这可能会导致意外的行为,因为您可能不希望更改listData中的元素。
为了解决这些问题,可以使用table.deepcopy函数来复制表,而不是将表分配给新变量。这将创建一个新的表,其中包含与原始表相同的值,但是它们引用不同的内存地址。这将确保更改一个变量的值不会更改另一个变量的值。
上一篇
Godot基础--生命周期
下一篇
BWmolStudioTool