Understanding *x ,= lst
I'm going through some old code trying to understand what it does, and I came across this odd statement:
*x ,= p
p is a list in this context. I've been trying to figure out what this statement does. As far as I can tell, it just sets
x to the value of
p. For example:
p = [1,2] *x ,= p print(x)
So is this any different than
x = p? Any idea what this syntax is doing?
*x ,= p is basically an obfuscated version of
x = list(p) using extended iterable unpacking. The comma after
x is required to make the assignment target a tuple (it could also be a list though).
*x, = p is different from
x = p because the former creates a copy of
p (i.e. a new list) while the latter creates a reference to the original list. To illustrate:
>>> p = [1, 2] >>> *x, = p >>> x == p True >>> x is p False >>> x = p >>> x == p True >>> x is p True