set('a.')
интерпретирует строку как список символов ['a','.]
, в результате чего {'.', 'a'}
set(['a.', 'b'])
интерпретирует список как ['a.', 'b']
, в результате чего {'a.', 'b'}
Теперь, когда вы берете разность наборов, результат равен {'a.', 'b'}
, поскольку разница наборов первого и второго набора является самим первым набором, поскольку в этих двух наборах нет общих элементов.
Из документов: https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset
разница (* другие). набор - другое - ...
Вернуть новый набор с элементами в наборе, которых нет в других.
Поведение можно увидеть ниже более четко
In [1]: set('a.')
Out[1]: {'.', 'a'}
In [2]: set(['a.', 'b'])
Out[2]: {'a.', 'b'}
In [3]: set(['a.', 'b']) - set('a.')
Out[3]: {'a.', 'b'}