The list is not the problem. The problem is the other reference, from "<socket._fileobject object at 0xf7d42c34>".

Also note that the workaround (u.fp.recv = None) removes the second reference.

On the other hand, it should also be noted that in close method, the socket is not explicitly closed and for a single urlopen, atleast 3 sockets are opened.
This is fine (at least in CPython), because the socket is destroyed when the refcount reaches zero, thus calling the finalizer.