New submission from Chris Colbert <sccolb...@gmail.com>:

The cmp_to_key func acts as a class factory for generating key objects that 
behave according to a user defined cmp function. 

Many patterns/libs that make use of key functions (for example blist and the 
SortedCollection recipe) store the the results of the key function internally 
to provide faster subsequent operations. For large datasets, the number of key 
objects can become large, and it makes sense to keep their memory footprint as 
small as possible. 

>From this stance, I propose to add "__slots__ = ('obj',)" to the class 
>definition of "K" in cmp_to_key to prevent the creation of the un-needed 
>instance dict and save the memory. 

I find it hard to conjure up a case where a user would need to weakref or add 
attributes to the return value of a key func. But should that need arise, that 
functionality could be provided as optional kwargs to cmp_to_key, or just have 
the user subclass the return value of cmp_to_key. Alternatively, the addition 
of __slots__ could be specified as a kwarg to cmp_to_key. 

I'd be happy to make a patch for any of these (or alternative) options.

----------
components: Library (Lib)
messages: 131691
nosy: Chris.Colbert, ncoghlan, rhettinger
priority: normal
severity: normal
status: open
title: cmp_to_key generated class should use __slots__
type: behavior
versions: Python 2.7, Python 3.1, Python 3.2, Python 3.3, Python 3.4

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue11628>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to