Why is this Blender matrix multiplication not distributive?
It is distributive if you convert the world matrix to a $3 \times 3$ matrix first or extend the vector by one dimension. The vector needs to have as many elements as the matrix has columns.
&gt;&gt;&gt; x = bpy.data.objects[&quot;Camera&quot;].matrix_world.to_3x3() @ (top_verts[1] - top_verts[0])
&gt;&gt;&gt; x
Vector((1.0669403076171875, 1.1318906545639038, 0.0))

&gt;&gt;&gt; y = bpy.data.objects[&quot;Camera&quot;].matrix_world.to_3x3() @ top_verts[1] - bpy.data.objects[&quot;Camera&quot;].matrix_world.to_3x3() @ top_verts[0]
&gt;&gt;&gt; y
Vector((1.0669403076171875, 1.1318907737731934, 0.0))

Generally it is not possible to multiply a $4 \times 4$ matrix with a $3 \times 1$ vector, because the dimensions don't match. Blender tries to be smart and extends the dimension of the vector by adding elements with value $1.0$ when necessary. However, since this is only done when the multiplication is performed, it is no longer distributive:
$M \times \left(\overrightarrow{v} + \overrightarrow{v}\right)_{extended} \neq M \times \overrightarrow{v_{extended}} + M \times \overrightarrow{v_{extended}}$
The reason for the difference is that Blender can perform the addition $\overrightarrow{v} + \overrightarrow{v}$ without extending the individual vectors. The element is only added afterwards when the multiplications with $M$ is performed. In comparison, $M \times \overrightarrow{v_{extended}} + M \times \overrightarrow{v_{extended}}$ requires to extend both vectors right away. The results are not equal since in the former case the vector should have been extended prior to the addition, resulting in a fourth element of value $2.0$. However, Blender performs the extension afterwards with an element of value $1.0$.
Blender tries to help the developer, perhaps a bit too much in this case, thus masking the error of wrong dimensions. This is especially hard to see since the output is truncated to the size of the original vector.