Julia 更新变量

标签 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]

最佳答案

b = a不创建副本,而只是指向标签 ba 引用的对象.当你这样做 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/

相关文章:

julia - 在 Julia 中实现多元牛顿法

julia - 为什么命名的 splats 在 Julia 中不起作用?

performance - 声明 struct 字段的类型与 Julia 中的结构本身的类型相同

julia - 如何测试两个数组是否共享同一个内存块?

julia - 保存数组的数组、HDF5、Julia

julia - 元素明智的操作数组 Julia

julia - 如何轻松检查Julia语言中嵌入函数的实现?

string - 在 Julia 中从字符串转换为 boolean 值

functional-programming - 为什么在 Julia 中对类型(而不是变量)设置了不变性?

julia - 绘制存储在二维数组中的一系列坐标