Differences between add_post_meta and update_post_meta

This:

update_post_meta(42, 'my_meta_key', [
    'my_meta_value_1',
    'my_meta_value_2',
    'my_meta_value_3',
]);

Changes a single post meta, but the value is an array, and you can’t put a array in the database, it wants a string for that column. So WordPress serializes it into a string and saves the result.

So I have a question, are either of these two ways of saving data better than the other?

Yes! Serialized data is bad, it’s difficult to query (sometimes imposssible), has a tiny additional overhead, and it exposes you to object deserialisation attacks.

If you want to store a list of 10 things, store 10 meta, not 1 meta with an array. If you really must do it, turn it into a comma separated list first or JSON encode it.