mirror of
https://github.com/satwikkansal/wtfpython
synced 2024-11-21 18:54:20 +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) для получения более подробной информации об изменении лимита по умолчанию, если вы ожидаете, что ваш код превысит это значение.
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Секция: Скользкие склоны
|
||||
|
||||
### ▶ Изменение словаря во время прохода по нему
|
||||
<!-- 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