Mutable named tuple with default value and conditional rounding support
In short:


dataclass is the right thing to use as a mutable named tuple. It's basically custom-built to be a great version of that idea.
Use decimal.Decimal for any financial numbers.
Don't re-implement round. There's a built-in version that behaves in nice, configurable ways with the Decimal object.
Not sure what the p.update(**{sale=600}, **dict(rate=0.9073)) is all about, just use p.update(sale=600, rate=0.9073) (except with Decimals)