New submission from Беатрис Бонева <beatrisvbon...@gmail.com>:

When changing a dict while iterating through it by removing one key and 
inserting other which is calculated based on the old one, the dict is changed 
unexpectedly.

The following function:

```
def test(d: dict): 
     for i in d: 
         d[i+1] = d.pop(i)
```

when called with input dict `{1: 'test'}` transforms the dict to:
- `{6: 'test'}` in Python3.7.4;
- `{8: 'test'}` in Python3.5.3 and Python2.7.

If I change the function to add 2 to the key ( `d[i+2] = d.pop(i)` ) and use 
the same input `{1: 'test'}` the dict is changed to:
- `{11: 'test'}` in Python3.7;
- `{9: 'test'}` in Python3.5.

Similar thing happens with strings:

```
def test(d: dict): 
     for i in d: 
         d[i+'x'] = d.pop(i)
```

When called with input dict `{'a': 'test'}` it transforms it to:
- `{'axxxxx': 'test'}` in Python3.7.4;
- `{'axx': 'test'}` in Python3.5.3.

----------
components: Library (Lib)
messages: 353954
nosy: Беатрис Бонева
priority: normal
severity: normal
status: open
title: Undefined behavior when changing dict while iterating it
type: behavior
versions: Python 2.7, Python 3.5, Python 3.6, Python 3.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue38372>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to