On Fri, Mar 31, 2017 at 06:58:21PM +1100, Chris Angelico wrote:
> This keeps on coming up in one form or another - either someone
> multiplies a list of lists and ends up surprised that they're all the
> same, or is frustrated with the verbosity of the alternatives.
> 
> Can we use the matmul operator for this?

I like the idea of using * for repetition without copying, and @ for 
repetition with shallow copying.

That does mean that now you have a built-in operator which relies on the 
copy module, since it has to work with arbitrary objects. Isn't copy 
written in Python?


[...]
> If this were supported by the built-in list type, it would be either of these:
> 
> >>> x = [[0] * 4] @ 2
> >>> x = [[0] @ 4] @ 4
> 
> (identical functionality, as copying an integer has no effect).

I think that's an implementation detail: copying immutable objects 
*might* return a reference to the original immutable object, or it might 
return a new object. For ints, any sane implementation would surely 
behave as we say, but let's not specify that as part of the 
behaviour of @ itself.

> The semantics could be either as shown above (copy.copy()), or
> something very simple and narrow like "lists get shallow-copied, other
> objects get referenced".

I prefer the distinction copy versus non-copy. That makes it simple to 
understand, and means that it works if somebody wants a list of dicts 
instead of a list of lists:

data = [{'a': 1, 'b': 2}] @ 5



-- 
Steve
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to