If I add an element tagsList.append(0), is the new value stored in UserDefaults?

YES.

At a glance, you have a setter and, as a setter, it only observes the value whenever you make a new assignment, like:

tagsList = [1,2,3] // new value.

If Array<Int> ([Int]) was class we could say that, even though you do modify the existing array by calling append, this is not an assignment, per se. However, [Int] is not a class, it’s a struct which means that any function that modifies (mutates, to be correct) existing struct, basically leads to a new assignment. This is the reason why you would see setter to trigger.