tryしてreturnしたあとのfinallyについて

タイトルがちょっと意味不明なのですが、こういうことです。

問1. 以下のコードで、ansの値は1と2のどちらでしょうか?

def f(a):
    try:
        a = a + 1
        return a
    finally:
        a = a + 1

ans = f(0)
print(ans) # ??

問2. 以下のコードで、ansのlistは、[0, 1]と[0, 1, 2]のどちらでしょうか?

def h(a):
    try:
        a.append(1)
        return a
    finally:
        a.append(2)

ans = h([0])
print(ans) # ??


問1の答え.
1

問2の答え.
[0, 1, 2]


finallyブロックは実行されてます。

なんでこんなことを考えることになったかというと、ここです。
Memory Allocation — Cython 0.28a0 documentation
mallocしたメモリ領域を、returnした後にfreeしたかったのです。

こんな書き方もあるんだなーって思いました。