Brandt Bucher <brandtbuc...@gmail.com> added the comment:

I apologize - I should have been clearer about what this accomplishes. I'll use 
list addition as an example, but this works for any binary operation on these 
containers.

If the left operand has a refcount of exactly one, it will simply mutate 
in-place rather than making an unnecessary copy. The simplest example of this 
is with literals:

[0] + list1

This just modifies the literal [0] in-place rather than creating an unnecessary 
copy. However, the more common use case is adding named lists. Currently, when 
adding list1 + list2 + list3, two copies (with one reference each) are made:

- The intermediate result of list1 + list2.
- The sum of this intermediate result and list3.

Only the second of these is actually returned - the first is used once and 
thrown away. The effect of this patch is to only create *at most one* (instead 
of n-1) copy for any arbitrarily long list summation, as this intermediate 
result will just mutate in-place for lists 3-n.

----------

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

Reply via email to