inconsistency with += between different types ?

Donn Cave donn at u.washington.edu
Mon Aug 5 18:32:09 CEST 2002


Quoth Andreas.Leitgeb at siemens.at (Andreas Leitgeb):
| The following snippet demonstrates it:
| --- snip ---
| def f(x,y): x+=y
|
| d='foo';     f(d,'bar');   print d    #  ->  'foo'
| i=4;         f(i,2);       print i    #  ->  4
| #but:
| l=[1,2,3];   f(l,[7,8,9]); print l    #  ->  [1, 2, 3, 7, 8, 9]
| --- snip ---
|  
| It seems that  lists are the only type, where the changes get visible
| outside, although I'd have expected all types to behave as lists do.
|
| I've not tried other extended-assignment(*)-operators *=,-=,...=, yet.
|
| The question seems to be:
|   Is an extended assignment(*) a "modification" of an object or
|   a re-assignment to the left-side operand ?

Yes (either can be true, though of course not at the same time.)

| Is it just a question of whether and how __iadd__ is implemented,

Yes.

| or is there some deeper meaning in this ?
| Is it a bug ?  

No, just an ill-conceived feature.

	Donn Cave, donn at u.washington.edu



More information about the Python-list mailing list