Issue 22498: frozenset allows modification via -= operator (original) (raw)
The operator -= modifies a frozenset (this should not be possible), instead of signaling a TypeError. Contrast with the += operator.
f=frozenset([1,2]) f frozenset([1, 2]) f -= frozenset([1]) f frozenset([2]) f -= frozenset([2]) f frozenset([]) f += frozenset([2]) Traceback (most recent call last): File "", line 1, in TypeError: unsupported operand type(s) for +=: 'frozenset' and 'frozenset'
This doesn't modify f, it replaces it with a new frozenset:
f = frozenset({1, 2}) f frozenset({1, 2}) id(f) 3071990668 f -= frozenset({1}) f frozenset({2}) id(f) 3066719340 Notice how the two ids are different.
In other words, f -= frozenset({1}) is equivalent to f = f - frozenset({1})
You get an error with += because f = f + frozenset({1}) is not a valid operation for (frozen)sets.