mirror of
https://github.com/satwikkansal/wtfpython
synced 2024-11-22 02:54:25 +01:00
Translate Modifying dictionary while iterating over it example
This commit is contained in:
parent
3fc9e9e028
commit
eccd68a4bd
39
translations/README-ru.md
vendored
39
translations/README-ru.md
vendored
@ -1951,3 +1951,42 @@ ValueError: Exceeds the limit (4300) for integer string conversion:
|
|||||||
[Смотри документацию](https://docs.python.org/3/library/stdtypes.html#int-max-str-digits) для получения более подробной информации об изменении лимита по умолчанию, если вы ожидаете, что ваш код превысит это значение.
|
[Смотри документацию](https://docs.python.org/3/library/stdtypes.html#int-max-str-digits) для получения более подробной информации об изменении лимита по умолчанию, если вы ожидаете, что ваш код превысит это значение.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
## Секция: Скользкие склоны
|
||||||
|
|
||||||
|
### ▶ Изменение словаря во время прохода по нему
|
||||||
|
<!-- Example ID: b4e5cdfb-c3a8-4112-bd38-e2356d801c41 --->
|
||||||
|
```py
|
||||||
|
x = {0: None}
|
||||||
|
|
||||||
|
for i in x:
|
||||||
|
del x[i]
|
||||||
|
x[i+1] = None
|
||||||
|
print(i)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат (Python 2.7- Python 3.5):**
|
||||||
|
|
||||||
|
```
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
```
|
||||||
|
|
||||||
|
Да, цикл выполняет ровно **восемь** итераций и завершается.
|
||||||
|
|
||||||
|
#### 💡 Объяснение:
|
||||||
|
|
||||||
|
* Проход по словарю и его одновременное редактирование не поддерживается.
|
||||||
|
* Выполняется восемь проходов, потому что именно в этот момент словарь изменяет размер, чтобы вместить больше ключей (у нас есть восемь записей об удалении, поэтому необходимо изменить размер). На самом деле это деталь реализации.
|
||||||
|
* То, как обрабатываются удаленные ключи и когда происходит изменение размера, может отличаться в разных реализациях Python.
|
||||||
|
* Так что для версий Python, отличных от Python 2.7 - Python 3.5, количество записей может отличаться от 8 (но каким бы ни было количество записей, оно будет одинаковым при каждом запуске). Обсуждения по этому поводу имеются в [issue](https://github.com/satwikkansal/wtfpython/issues/53) и на [StackOverflow](https://stackoverflow.com/questions/44763802/bug-in-python-dict).
|
||||||
|
* В Python 3.7.6 и выше при попытке запустить пример вызывается исключение `RuntimeError: dictionary keys changed during iteration`.
|
||||||
|
|
||||||
|
---
|
||||||
|
Loading…
Reference in New Issue
Block a user