readonly member dict is not mutable outside

so we can share memoize-style cache across different instances