[Python-3000] Set literals (original) (raw)

Raymond Hettinger rhettinger at ewtllc.com
Mon Aug 28 22:08:48 CEST 2006


Georg Brandl wrote:

In the meantime, I played around with the peepholer and tried to copy the "for x in tupleorlist" optimization for sets. Results are in SF patch #1548082.

Did you mean "if x in tuple_or_list"? IIRC, there was some reason that mutable lists were not supposed to be made into constants in for-loops.

* list comprehensions are special-cased because of the LISTAPPEND opcode. If there isn't going to be a special-cased SETADD, it's probably the easiest thing to transform {x for x in a} into set(x for x in a) in the AST step, with "set" of course always being the builtin set.

Set comprehensions and list comprehensions are fundamentally the same and therefore should have identical implementations.

While transformation to a generator expression may seem like a good idea now, I expect that you'll observe a two-fold performance hit and end-up abandoning that approach in favor of the current LIST_APPEND approach.

So it would probably be best to start by teaching the compiler to hide the loop variable in a LIST_APPEND approach to list comprehensions and then duplicate that approach for set comprehensions.

Raymond



More information about the Python-3000 mailing list