[Python-ideas] Adding "+" and "+=" operators to dict

Andrew Barnert abarnert at yahoo.com
Sun Feb 15 01:10:44 CET 2015


Sorry, I didn't get the following two emails until I sent this one, so this reply is now largely irrelevant.

Sent from a random iPhone

On Feb 14, 2015, at 16:09, Andrew Barnert <abarnert at yahoo.com.dmarc.invalid> wrote:

> On Feb 14, 2015, at 11:12, Ethan Furman <ethan at stoneleaf.us> wrote:
> 
>> On 02/13/2015 06:57 PM, Andrew Barnert wrote:
>>> On Feb 13, 2015, at 18:46, Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:
>>> 
>>>> Andrew Barnert wrote:
>>>> 
>>>>> I think it's reasonable for a target to be able to assume that it will get a
>>>>> setattr or setitem when one of its subobjects is assigned to. You might need
>>>>> to throw out cached computed properties, ...
>>>> 
>>>> That's what I was thinking. But I'm not sure it would be
>>>> a good design,
>>> 
>>> Now I'm confused.
>>> 
>>> The current design of Python guarantees that an object always gets a setattr or setitem when one of its elements is assigned to. That's an important property, for the reasons I suggested above. So any change would have to preserve that property. And skipping assignment when __iadd__ returns self would not preserve that property. So it's not just backward-incompatible, it's bad.
>> 
>> --> some_var = ([1], 'abc')
>> --> tmp = some_var[0]
>> --> tmp += [2, 3]
>> --> some_var
>> ([1, 2, 3], 'abc')
>> 
>> In that example, 'some_var' is modified without its __setitem__ ever being called.
> 
> Of course. Because one of some_var's elements is not being assigned to. There is no operation on some_var here at all; there's no difference between this code and code that uses .extend() on the element.
> 
> Assigning to an item or attribute of some_var is an operation on some_var.  
> 
> It's true that languages with _different_ assignment semantics could probably give us a way to translate everything that relies on our semantics directly, and even let us write new code that we couldn't in Python (like some_var being notified in some way). C++-style references that can overload assignment, Tcl variable tracing, Cocoa KV notifications, whatever. 
> 
> But the idea that assignment to an element is an operation on the container/namespace is the semantics that Python had used for decades;  anything you can reason through from that simple idea is always true; changing that would be bad.
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/


More information about the Python-ideas mailing list