Измените x.append(lambda : pv(v))
на x.append(lambda v=v: pv(v))
.
Вы ожидаете, что «python lambdas привязывается к ссылке, на которую указывает локальная переменная, за сценой», но это не так, как работает Python. Python ищет имя переменной во время вызова функции, а не когда она создается. Использование аргумента по умолчанию работает, потому что аргументы по умолчанию оцениваются при создании функции, а не при ее вызове.
Это не что-то особенное в отношении лямбда. Рассмотрим:
x = "before foo defined"
def foo():
print x
x = "after foo was defined"
foo()
печатает
after foo was defined