The difference is only in the way the list is displayed. I.e. the value of y
is exactly what you'd expect.
The difference in the way the lists are displayed results from the fact that, unlike l
, y
is not a self-referencing list:
l[0] is l
=> True
y[0] is y
=> False
y
is not self-referencing, because y
does not reference y
. It references l
, which is self-referencing.
Therefor, the logic which translates the list to a string detects the potential infinite-recursion one level deeper when working on y
, than on l
.