首页 > 解决方案 > Julia 更新变量

问题描述

我只是想知道,为什么 Julia 会输出以下内容

a = [1,2,3]
b = a 
b.+=[5,5,5]

然后变量 a 也被更新,所以在代码运行之后a=[6,7,8]

为什么是这样?如果最后一行是b+=[5,5,5],则 a 不会更新并保持不变a=[1,2,3]

标签: julia

解决方案


b = a不会创建副本,而只是将标签b指向 . 引用的对象a。当您这样做时b = something_else,您只需重新分配标签b以指向其他内容。但是,一旦您更改了其中的元素b(即不是绑定),您也在更改a,因为它们都指向同一个底层对象。您甚至不需要+=看到这一点,只需定期分配即可:

julia> a = [1,2,3];

julia> b = a;

julia> b = 5;

julia> a
3-element Vector{Int64}:
 1
 2
 3

julia> b = a;

julia> b[1] = 10;

julia> a
3-element Vector{Int64}:
 10
  2
  3

.+=现在和之间的区别在于+=b += [5, 5, 5]意味着b = b + [5, 5, 5],即您本质上是在做b = [6, 7, 8],从而替换了 的绑定b。如果你这样做b .+= [5, 5, 5]了,你就是在按元素广播赋值,也就是说你正在改变 中的每个元素b,而不是b指向的对象(保存你的整数的向量),在这种情况下它仍然与a.


推荐阅读