I noticed that deepcopy of a vector doesn't know that the result is the
same type. Regular copy does, see below. Is this intentional or a bug?
In [24]:
v=rand(5)
@code_typed deepcopy(v)
Out[24]:
1-element Array{Any,1}:
:($(Expr(:lambda, {:x},
{{:_var2,:_var3},{{:x,Array{Float64,1},0},{:_var2,(Int64,),0},{:_var3,Array{Any,1},18}},{}},
:(begin # deepcopy.jl, line 6:
_var3 = top(ccall)(:jl_alloc_array_1d,$(Expr(:call1,
:(top(apply_type)), :Array, Any, 1))::Type{Array{Any,1}},$(Expr(:call1,
:(top(tuple)), :Any,
:Int))::(Type{Any},Type{Int64}),Array{Any,1},0,32,0)::Array{Any,1}
return deepcopy_internal(x::Array{Float64,1},$(Expr(:new,
:(top(getfield)(Base,:ObjectIdDict)::Type{ObjectIdDict}),
:(_var3::Array{Any,1})))::ObjectIdDict)
end))))
In [25]:
@code_typed copy(v)
Out[25]:
1-element Array{Any,1}:
:($(Expr(:lambda, {:a},
{{:_var1,:_var0},{{:a,Array{Float64,1},0},{:_var1,Int64,18},{:_var0,Array{Float64,1},18}},{}},
:(begin # abstractarray.jl, line 202:
_var1 = arraysize(a::Array{Float64,1},1)::Int64
_var0 = top(ccall)(:jl_alloc_array_1d,$(Expr(:call1,
:(top(apply_type)), :Array, Float64, 1))::Type{Array{Float64,1}},$(Expr(:call1,
:(top(tuple)), :Any,
:Int))::(Type{Any},Type{Int64}),Array{Float64,1},0,_var1::Int64,0)::Array{Float64,1}
return
copy!(_var0::Array{Float64,1},1,a::Array{Float64,1},1,arraylen(a::Array{Float64,1})::Int64)::Array{Float64,1}
end::Array{Float64,1}))))