Julia中未加!却出现数组意外关联修改,求解析该行为
Julia数组共享值问题的原因与解决
你遇到的问题和函数声明方式无关,核心是Julia中数组的赋值是引用传递:
当你执行xit = mut;时,并没有创建新数组,只是让变量xit和mut指向内存中同一个数组对象。这意味着通过任意一个变量修改数组内容,另一个变量看到的都会是修改后的结果——它们本质是同一个数组的两个“别名”。
解决方法
如果需要xit成为mut的独立副本,互不影响,要使用复制操作:
- 浅拷贝(针对你的
Float64值类型数组完全够用):xit = copy(mut); - 若数组包含引用类型元素(比如嵌套数组),则需深拷贝:
using Base: deepcopy xit = deepcopy(mut);
修改后的示例代码
sample_size = 100; mc_reps = 100; ka = .01; threshold=1; mut = Array{Float64}(undef,mc_reps,sample_size); xit = copy(mut); # 改为copy创建独立副本 mut[:,1] = ones(mc_reps); regime_prob(ka,ce,muu) = 1/(1+ exp(ka*(ce-muu))); xit[1,1] = regime_prob(ka,threshold,mut[1,1]); xit[:,1] = regime_prob.(ka,threshold,mut[:,1]);
修改后mut[:,1]会保持全1,xit[:,1]为计算后的结果,两者不再关联。
内容的提问来源于stack exchange,提问作者KeynesCoeFen
相关产品推荐
相关产品推荐

