This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: frozenset allows modification via -= operator
Type: behavior Stage: resolved
Components: Interpreter Core Versions: Python 2.7
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: James.Paget, ezio.melotti
Priority: normal Keywords:

Created on 2014-09-25 17:26 by James.Paget, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Messages (2)
msg227557 - (view) Author: James Paget (James.Paget) Date: 2014-09-25 17:26
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 "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +=: 'frozenset' and 'frozenset'
>>>
msg227558 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2014-09-25 17:41
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.
History
Date User Action Args
2022-04-11 14:58:08adminsetgithub: 66688
2014-09-25 17:41:40ezio.melottisetstatus: open -> closed

nosy: + ezio.melotti
messages: + msg227558

resolution: not a bug
stage: resolved
2014-09-25 17:26:56James.Pagetcreate