我只是想知道,为什么 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]
最佳答案
b = a
不创建副本,而只是指向标签 b
到 a
引用的对象.当你这样做 b = something_else
,您只需重新分配标签 b
指向别的东西。但是,一旦您更改了 b
中的元素, (即不是绑定(bind)),您正在更改 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
的绑定(bind).如果你这样做 b .+= [5, 5, 5]
,您正在按元素广播分配,也就是说,您正在更改 b
中的每个元素,但不是 b
的对象(保存整数的向量)指向,在这种情况下仍与 a
相同.
关于Julia 更新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68313605/