Python3において以下の二つのコードは異なる挙動をします:

fs = [lambda x: i*x for i in range(3)]
for i in range(3):
    print(fs[i](3))

これは6 6 6と出力され、

fs2 = []
for i in range(3):
    fs2.append(lambda x: i*x)
for i in range(3):
    print(fs2[i](3))

こちらは0 3 6と出力されます。
両者は一見同じ挙動をするように思えますが、どうして異なった挙動をするのでしょうか?