On Wed, Aug 24, 2016 at 9:03 PM, Joaquin Alzola
<[email protected]> wrote:
>>> One might guess a.extend(a) would turn into an infinite loop. It turns out
>>> here Python first gets all the items of `a' and then append them to `a', so
>>> the infinite loop is avoided.
>>>> a = [1,2]
>>>> for x in a: a.append(x)
>>...
>>^CTraceback (most recent call last):
> > File "<stdin>", line 1, in <module>
>>KeyboardInterrupt
>>>>> len(a)
>>6370805
>
>>That right there, folks, is an infinite loop.
>
> If I am correct python points out an infinite loop with the "...", just
> pointing to more information.
That's true of self-referential objects and circular references:
>>> a = [1, 2]
>>> a.append(a)
>>> a
[1, 2, [...]]
In this case, it's not an infinite loop or anything; it's simply an
object that references itself:
>>> id(a)
139945904550344
>>> [id(x) for x in a]
[9241344, 9241376, 139945904550344]
The list has three elements, one of which is the list itself. Same
applies if the list has a reference to something else which has a
reference to the original list, or anything along those lines.
But "a.extend(a)" isn't quite like that. In its purest form, it means
the same as the 'for' loop that I showed above, but... well, this
comment from the CPython sources says exactly what I'm thinking of:
Objects/listobject.c:795
/* Special cases:
1) lists and tuples which can use PySequence_Fast ops
2) extending self to self requires making a copy first
*/
> This email is confidential and may be subject to privilege. If you are not
> the intended recipient, please do not copy or disclose its content but
> contact the sender immediately upon receipt.
>
This email is confident and may be subject to white privilege, black
privilege, and privileges of other colours. If you are not the
intended recipient, please contact a lawyer and tell him that email
footers are unenforceable.
ChrisA
--
https://mail.python.org/mailman/listinfo/python-list