Why does Python extend output [[...]]<>
This question already has an answer here:
The ... indicates that the list contains a recursive loop, i.e., at some level something contains itself. This is because you extended x with x, so you essentially put x inside itself.
There is no ... in the second example because y is a distinct object. Although it happens to be equal to x in that both are empty lists, they are not the same empty list.