我的问题是关于数组元素的更改。 考虑以下代码片段:

julia> a = [1 2; 3 4]
2×2 Array{Int64,2}:
 1  2
 3  4

julia> b = a
2×2 Array{Int64,2}:
 1  2
 3  4

julia> a[1,1] = -1
-1

julia> b
2×2 Array{Int64,2}:
 -1  2
  3  4

但是,当我运行以下命令时:

julia> a = [1 2; 3 4]
2×2 Array{Int64,2}:
 1  2
 3  4

julia> b = a
2×2 Array{Int64,2}:
 1  2
 3  4

julia> a = [5 6; 7 8]
2×2 Array{Int64,2}:
 5  6
 7  8

julia> b
2×2 Array{Int64,2}:
 1  2
 3  4

数组b保持不变? 为什么会这样,有人可以解释吗?

#1楼 票数:6 已采纳

在第一示例中,要创建一个数组并分配一个指针阵列,以a 然后,在第2行中将相同的指针分配给b ,以便ab引用相同的内存位置。 更改数组中的元素时,不会更改ab指向的位置,因此ab都将在数组内的第一个内存偏移中反映新值。

在第二个例子中,将创建一个数组和一个指针分配给a 然后,您像以前一样将相同的指针分配给b ,但是接下来您将在另一个内存位置中创建一个新数组,并将位置分配给a 现在, ab指向两个不同的内存位置,每个位置都有自己的数组。

这是一个示范:

julia> a = [1 2; 3 4]
2×2 Array{Int64,2}:
 1  2
 3  4

julia> pointer(a)   # show the memory location of the array
Ptr{Int64} @0x000000011cd1a120

julia> b = a
2×2 Array{Int64,2}:
 1  2
 3  4

julia> pointer(b)   # note - same memory location
Ptr{Int64} @0x000000011cd1a120

julia> a = [5 6; 7 8]
2×2 Array{Int64,2}:
 5  6
 7  8

julia> pointer(a)    # note - new array; new memory location
Ptr{Int64} @0x000000011d259e80

julia> pointer(b)    # still referencing the first array's location.
Ptr{Int64} @0x000000011cd1a120

  ask by aberdysh translate from so

未解决问题?本站智能推荐:

2回复

朱莉娅:二维数组分配

我正在尝试使用嵌套循环在2d数组中进行赋值。 我正在尝试按以下方式访问数组的元素。 但是我错了。 我已经搜索过,但是没有得到结果。 如何在2d数组中分配Julia? BoundsError:尝试访问索引为[0]的7×6数组{Int64,2} 我的密码 错误
2回复

朱莉娅:数组操作

我在从Julia中删除数组中的特定元素时遇到了麻烦。 我有一个Job对象数组,每个对象都有自己的属性,当用户回答问卷时,我想从数组中删除与用户首选项不匹配的作业。 基本上,例如,如果用户不在外面工作,我会想要删除构造。 在查看julia文档之后,似乎没有一种方法可以简单地从基本数组中
1回复

读入朱莉娅的数组

我对Julia相对较新,我正在寻找一种有效的方式从文本文件读入并将每个“列”存储在一个数组中(我有2列,但一般解决方案也会很棒)。 例如,我想要输入 被读入两个数组,比如x和y,这样x = [1 3 5]和y = [2 4 6]。 我有一个工作的解决方案(可能不会编译,只是自由交配),但
2回复

朱莉娅-浏览结构中的数组的许多分配

我目前正在为茱莉亚的怪异行为而挣扎。 我正在浏览数组,无论数组是否在struct内部,Julia的行为都不相同。 对于结构内部的数组,许多分配似乎毫无意义。 具体来说,分配的数量与数组的大小一样多。 这是复制此问题的代码: 和我得到的输出: 起初我以为这是一个类型问题,但我不
3回复

朱莉娅的静态数组?

我有多次调用的函数,需要临时数组。 每次调用函数时都不会发生数组分配,我希望临时分配一次。 如何在Julia中创建一个静态分配的数组,具有函数范围?
1回复

朱莉娅:广播结果数组

这似乎很基本,我以为有人已经问过这个,但我找不到它。 当我使用广播天真的方式时,我想得到一个二维数组的阵列数组。 例如,这个功能 我跑的时候 我明白了 相反,我想得到
3回复

在朱莉娅变量中的数组结束

我想在一个循环中将一个数组a切换成一个循环,这样它就可以分成n样本的块。 数组nsamples的长度不是 n的倍数,因此最后一步将更短。 我的尝试是使用三元运算符来检查步幅的大小是否大于数组的长度: 这样,如果我超出了数组的大小, a[i+1:end_]将解析为a[i+1:end] 。
1回复

朱莉娅:如何从数组中选择整行

好的,所以我仍然对基本语法感到困惑。 现在,我想知道如何创建一个用单个值c填充的矩阵,一旦创建了如何替换整个行。 到目前为止,这就是我所拥有的: 上面的语法有效,但似乎不必要。 有什么建议么? 谢谢弗朗西斯