[Python-Dev] RFC: PEP 509: Add a private version to dict (original) (raw)
Victor Stinner victor.stinner at gmail.com
Fri Apr 15 17:24:21 EDT 2016
- Previous message (by thread): [Python-Dev] RFC: PEP 509: Add a private version to dict
- Next message (by thread): [Python-Dev] RFC: PEP 509: Add a private version to dict
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
2016-04-15 23:16 GMT+02:00 Ethan Furman <ethan at stoneleaf.us>:
It's an useful property. For example, let's say that you have a guard on globals()['value']. The guard is created with value=3. An unit test replaces the value with 50, but then restore the value to its previous value (3). Later, the guard is checked to decide if an optimization can be used. I don't understand -- shouldn't the version be incremented with the value was replaced with 50, and again when re-replaced with 3?
Oh wait, I'm tired and you are right.
Not increasing the value only helps on this code:
dict[key] = value dict[key] = value # version doesn't change
If the dictionary values are modified during the loop, the dict version is increased. But it's allowed to modify values when you iterate on keys. I don't understand. Could you provide a small example?
For example, this loop is fine:
for key in dict: dict[key] = None
In this loop, the dict version is increased at each loop iteration.
For iter(dict), the check prevents a crash.
The following example raises a RuntimeError("dictionary changed size during iteration"):
d={1:2} for k in d: d[k+1] = None
Victor
- Previous message (by thread): [Python-Dev] RFC: PEP 509: Add a private version to dict
- Next message (by thread): [Python-Dev] RFC: PEP 509: Add a private version to dict
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]