当我以两种不同的方式构造一个2元素数组时(例如a
和b
,当我向一个内部数组添加一个元素时,我得到两个不同的结果。这也发生在{ {1}}。基于构造每个后的输出,我希望它们完全相同?
append!
答案 0 :(得分:3)
Check == False
将创建一个初始化为相同对象的n个副本(浅)的数组,以便fill
=== b[1]
,当你更新b[2]
,您正在更新b[1]
中也指向的同一对象。
答案 1 :(得分:2)
看看以下示例。 希望行为符合您的期望。
a_1 = []
a_2 = []
a = [a_1, a_2]
push!(a_1, 1.0)
@show a_1
@show a
输出[1]:
a_1 = Any[1.0]
a = Array{Any,1}[Any[1.0],Any[]]
push!(a[1], 2.0)
@show a_1 #Guess what this shows
@show a
输出[2]:
a_1 = Any[1.0,2.0]
a = Array{Any,1}[Any[1.0,2.0],Any[]]
b_n = []
b = fill(b_n, 2)
push!(b_n, 1.0)
@show b_n
@show b
输出[3]:
b_n = Any[1.0]
b = Array{Any,1}[Any[1.0],Any[1.0]]
push!(b[1], 2.0)
@show b_n #Guess what this shows
@show b
输出[4]
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
输出[5]:
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
输出[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
相同
每次放置[]
时,您都会构建一个新的Vector
。
所以在第一种情况下:a=[[],[]]
创建一个包含两个新向量的向量,我在Input [1]中调用a_1
和a_2
在第二种情况下:b=fill([],2]
创建一个向量,我在Input [3]中调用b_n
,然后使用该向量b_n
填充长度为2的向量。
这与Input [3](带c
)中的示例相同。
我可能会说:[b_n, b_n]
如fill(b_n,2)
因此它引用了每个位置的相同向量。所以改变一个,改变两者。