Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 为什么这两种不同的数组构造方法会产生不同的行为?_Arrays_Julia - Fatal编程技术网

Arrays 为什么这两种不同的数组构造方法会产生不同的行为?

Arrays 为什么这两种不同的数组构造方法会产生不同的行为?,arrays,julia,Arrays,Julia,当我以两种不同的方式(例如a和b)构造一个2元素数组时,当我将一个元素添加到其中一个内部数组时,会得到两种不同的结果。append!。基于构造每个数组后的输出,我希望它们完全相同 julia> a = [[],[]] 2-element Array{Array{Any,1},1}: Any[] Any[] julia> push!(a[1],1.0) 1-element Array{Any,1}: 1.0 julia> a 2-element Array{Array{

当我以两种不同的方式(例如
a
b
)构造一个2元素数组时,当我将一个元素添加到其中一个内部数组时,会得到两种不同的结果。
append!
。基于构造每个数组后的输出,我希望它们完全相同

julia> a = [[],[]]
2-element Array{Array{Any,1},1}:
 Any[]
 Any[]

julia> push!(a[1],1.0)
1-element Array{Any,1}:
 1.0

julia> a
2-element Array{Array{Any,1},1}:
 Any[1.0]
 Any[]

julia> b = fill([],2)
2-element Array{Array{Any,1},1}:
 Any[]
 Any[]

julia> push!(b[1],1.0)
1-element Array{Any,1}:
 1.0

julia> b
2-element Array{Array{Any,1},1}:
 Any[1.0]
 Any[1.0]

看看下面的例子。 希望行为如你所料

输入[1]: 输出[1]:

a_1 = Any[1.0]
a = Array{Any,1}[Any[1.0],Any[]]
输入[2] 输出[2]:

a_1 = Any[1.0,2.0]
a = Array{Any,1}[Any[1.0,2.0],Any[]]

输入[3]: 输出[3]:

b_n = Any[1.0]
b = Array{Any,1}[Any[1.0],Any[1.0]]
输入[4]: 输出[4]

b_n = Any[1.0,2.0]
b = Array{Any,1}[Any[1.0,2.0],Any[1.0,2.0]]
输入[5]: 输出[5]:

c_n = Any[1.0]
c = Array{Any,1}[Any[1.0],Any[1.0]]
输入[6]: 输出[6]:

c_n = Any[1.0,2.0]
c = Array{Any,1}[Any[1.0,2.0],Any[1.0,2.0]]

因此,输入[1]与
a
相同,输入[3]与
b

每次放置
[]
时,都会构造一个新的
向量

因此,在第一种情况下:
a=[[],[]]
创建一个包含两个新向量的向量,我在输入[1]中称之为
a_1
a_2

在第二种情况下:
b=fill([],2]
在输入[3]中创建一个向量,我称之为
b_n
,然后它用该向量
b_n
填充长度为2的向量。 这与输入[3](带
c
)中的示例相同。 我还不如说:
[b_n,b_n]
正如前面所说的
fill(b_n,2)


因此,它在每个位置引用相同的向量。因此,更改一个,就会同时更改两者。

fill
将创建一个用相同对象的n个副本(浅层)初始化的数组,以便
b[1]
===
b[2]
,当您更新
b[1]
时,您正在更新同样指向
b[2]的相同对象

是否有类似的函数填充值而不是引用?
a=[[]for uuu.[in 1:10]为数组中的每个元素初始化一个空数组。
push!(b[1], 2.0)
@show b_n #Guess what this shows
@show b
b_n = Any[1.0,2.0]
b = Array{Any,1}[Any[1.0,2.0],Any[1.0,2.0]]
c_n = []
c = [c_n, c_n]
push!(c_n, 1.0)
@show c_n 
@show c 
c_n = Any[1.0]
c = Array{Any,1}[Any[1.0],Any[1.0]]
push!(c[1], 2.0)
@show c_n 
@show c
c_n = Any[1.0,2.0]
c = Array{Any,1}[Any[1.0,2.0],Any[1.0,2.0]]