Before I try to explain it in some non-understandable way, here an example:
```
In [3]: a = np.array([(1,2), 3], dtype=object)

In [4]: a[0] # not an array, just the tuple, but size=() should be a 0-d array to be quite clean.
Out[4]: (1, 2)

In [5]: np.array(a[0]) # not an array with a tuple inside.
Out[5]: array([1, 2])

In [6]: res = np.empty((), dtype=a.dtype)

In [7]: res[()] = a[0]

In [8]: res # OK now
Out[8]: array((1, 2), dtype=object)
```
So yeah, that whole dance is just to allow size=() to actually return 0-d arrays...