You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:25:17