Both implementations can be different altogether. A change in the post's canonical link would mainly be performed, when you have let's say 5 articles with all 5 articles talking about the same topic, and the content are all very similar.
Due to such similarity, this causes issues like keyword cannibalization, which means that all these 5 posts could be fighting for the same spot on the SERP for the same keyword. Sometime, with 5 posts competing for the same spot on the SERP, that will cause major fluctuations to your SERP ranking in the process, which could be detrimental in some ways.
So if you have 5 posts all with similar content talking about the same thing, then pick 1 most competitive post that is doing well, and change the canonical link on the remaining 4 posts to the primary post, and that will signal the search engine to list and rank your preferred post instead. This will eliminate keyword cannibalization and your rank will be more stable in the process.
However, I doubt the canonical link passes link juice like the 301 does, or maybe not as effective.