The current implementation of set.symmetric_difference(others) and set.symmetric_difference_update(others) is that others will be convert to a set to remove duplicate elements, before performing the symmetric difference.

I propose another version of symmetric difference (by adding an optional argument or by adding another method) to keep the duplicate elements of the iterable. For example, set().symmetric_difference("aa", remove_duplicates=False) returns set() instead of {'a'}.

That would be the symmetric difference for a multiset type, not for a set type.
Is there something like std::unordered_multiset provided in Python? Such a behavior would be more appropriate for that.

I am sorry for the misunderstanding, but what I mean is to keep duplicates only for the iterable argument (if it is already a set, keeping or removing duplicates makes no difference).

What I propose is basically simplifying

for i in iterable:
my_set.symmetric_difference_update((i,))