IMHO we shouldn't slow down cached_method just to allow you to write 
incorrect code (and caching a returned list is a bug). If anything, 
cached_method should print a warning if the result is mutable so people can 
fix their code.


 

On Friday, June 3, 2016 at 1:10:25 PM UTC-4, Simon King wrote:
>
> Hi All, 
>
> I know it would considerably slow down @cached_method, but what about the 
> following: 
> - When a new item for the cache is first computed, test whether it is 
>   hashable. 
> - Along with the item, store whether it is hashable or not (so that 
>   there's no need to test hashability again). 
> - If an item is taken from cache, the return either the item itself or a 
>   (deep?) copy of it, depending on whether it is hashable or not. 
>
> In addition to a slow-down, it might break pickles (because it would 
> change the internal format of the cache). 
>
> So, maybe this is better: Add an option to @cached_method, such as 
>     @cached_method(copy=True) 
>     def list(self) 
>             return list(self) 
> It means that the resulting wrapper of the list() method will use a 
> cache, but will always copy the result before returning it. 
>
> Cheers, 
> Simon 
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to