Вот что я имею в виду:
> python -m timeit "set().difference(xrange(0,10))"
1000000 loops, best of 3: 0.624 usec per loop
> python -m timeit "set().difference(xrange(0,10**4))"
10000 loops, best of 3: 170 usec per loop
Очевидно, python выполняет итерацию по всему аргументу, даже если результат известен как пустой набор заранее. Есть ли веская причина для этого? Код выполнялся в python 2.7.6.
(Даже для непустых множеств, если вы обнаружите, что вы удалили все элементы первого набора на середине итерации, имеет смысл сразу остановиться.)