I wasnt able to find the definition of "UserList", but this __eq__ looks suspect because it doesnt obey transitivity. 

a = UserList( ... )
b = [ ... ]
c = UserList( ... )

You can construct these such that 'a==b' and 'b==c' but where 'a==c' is not true.