Чтобы понять разницу, попробуйте записать в новые массивы:
Давайте начнем с непрерывных копий.
>>> import numpy as np
>>> x = np.array([[1,2,3]])
>>> y = np.array([[1],[2],[3]])
>>>
>>> xc, yc = [np.array(a) for a in np.broadcast_arrays(x, y)]
>>> xc
array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3]])
Мы можем изменить элемент, и ничего неожиданного не произойдет.
>>> xc[0, 0] = 0
>>> xc
array([[0, 2, 3],
[1, 2, 3],
[1, 2, 3]])
>>> x
array([[1, 2, 3]])
Теперь давайте попробуем то же самое с широковещательными массивами:
>>> xb, yb = np.broadcast_arrays(x, y)
>>> xb
array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3]])
Хотя мы пишем только в верхний левый элемент ...
>>> xb[0, 0] = 0
...весь левый столбец изменится ...
>>> xb
array([[0, 2, 3],
[0, 2, 3],
[0, 2, 3]])
..., а также входной массив.
>>> x
array([[0, 2, 3]])