x.recv が返すのはバウンド(束縛)メソッドだから im_self で x の参照を持っている。
>>> x.read = x.recv
>>> x.read.im_self is x
True

だから参照カウンタは 0 にならない。

# x の参照カウンタ +1 => 1
x = X()
# x の参照カウンタ +1 => 2
x.read = x.recv
# x の参照カウンタ -1 => 1
del x