def difference(self, other, sort=None):
self._validate_sort_keyword(sort)<EOL>self._assert_can_do_setop(other)<EOL>if self.equals(other):<EOL><INDENT>return self._shallow_copy(self._data[:<NUM_LIT:0>])<EOL><DEDENT>other, result_name = self._convert_can_do_setop(other)<EOL>this = self._get_unique_index()<EOL>indexer = this.get_indexer(other)<EOL>indexer = indexer.take((indexer != -<NUM_LIT:1>).nonzero()[<NUM_LIT:0>])<EOL>label_diff = np.setdiff1d(np.arange(this.size), indexer,<EOL>assume_unique=True)<EOL>the_diff = this.values.take(label_diff)<EOL>if sort is None:<EOL><INDENT>try:<EOL><INDENT>the_diff = sorting.safe_sort(the_diff)<EOL><DEDENT>except TypeError:<EOL><INDENT>pass<EOL><DEDENT><DEDENT>return this._shallow_copy(the_diff, name=result_name, freq=None)<EOL>
Return a new Index with elements from the index that are not in
`other`.

This is the set difference of two Index objects.

Parameters
----------
other : Index or array-like
sort : False or None, default None
    Whether to sort the resulting index. By default, the
    values are attempted to be sorted, but any TypeError from
    incomparable elements is caught by pandas.

    * None : Attempt to sort the result, but catch any TypeErrors
      from comparing incomparable elements.
    * False : Do not sort the result.

    .. versionadded:: 0.24.0

    .. versionchanged:: 0.24.1

       Changed the default value from ``True`` to ``None``
       (without change in behaviour).

Returns
-------
difference : Index

Examples
--------

>>> idx1 = pd.Index([2, 1, 3, 4])
>>> idx2 = pd.Index([3, 4, 5, 6])
>>> idx1.difference(idx2)
Int64Index([1, 2], dtype='int64')
>>> idx1.difference(idx2, sort=False)
Int64Index([2, 1], dtype='int64')