```
a = Array{Int}[]
push!(a, [1 2; 3 4])
@show typeof(a)
```

```
Array{Array{Int64,N} where N,1}
```

In the above, how should I read `where N,1`

? Especially, what does `1`

represent here?

How may I create a variable of type `Array{Array{Int64,N} where N,2}`

?

```
a = Array{Int}[]
push!(a, [1 2; 3 4])
@show typeof(a)
```

```
Array{Array{Int64,N} where N,1}
```

In the above, how should I read `where N,1`

? Especially, what does `1`

represent here?

How may I create a variable of type `Array{Array{Int64,N} where N,2}`

?

actually, the `1`

goes with the outermost `Array`

, the meaning of this type is:

â€śArray of 1 dimension, and element of this array is of type `Array{Int64, N}`

â€ť,

the `where N`

means `N`

is not specified, such that it is possible to push vector or even a higher dimensional tensor into `a`

:

```
julia> push!(a, rand(Bool, 2,2,2))
2-element Vector{Array{Int64, N} where N}:
julia> a[1]
2Ă—2 Matrix{Int64}:
julia> a[2]
2Ă—2Ă—2 Array{Int64, 3}:
```

Maybe this will also help you understand:

```
julia> [[1 2;3 4]]
1-element Vector{Matrix{Int64}}:
julia> Matrix{Int64} == Array{Int64,2}
true
```

The reason why your original example didnâ€™t return a

```
Array{Matrix{Int64}, 1}
```

is because you specifically wanted the flexibility in `N`

:

```
julia> Array{Int}
Array{Int64, N} where N
```

2 Likes

Ah! Thanks. Makes sense. Canâ€™t believe I couldnâ€™t catch it

1 Like