- It iterates through the list, compares every item with the item to be removed and if it finds a match, it just removes that. It works in O(N). Source: https://wiki.python.org/moin/TimeComplexity 
- It removes only the first matched item and returns immediately. 
- If the item to be removed is not there, it fails with - ValueError
 
This is the listremove function which removes the item from a list and it uses PyObject_RichCompareBool to check if the items are the same. And PyObject_RichCompareBool is implemented like this
/* Quick result when objects are the same.
   Guarantees that identity implies equality. */
if (v == w) {
    if (op == Py_EQ)
        return 1;
    else if (op == Py_NE)
        return 0;
}
res = PyObject_RichCompare(v, w, op);
If the identity of the objects are the same (if both the objects are the same), then return 1 otherwise compare the values and return the result.