defaultdict внутри проверки: почему словарь растёт от одних только чтений
Код считает граф смежности и потом проверяет наличие соседей:
from collections import defaultdict
graph = defaultdict(list)
graph["a"].append("b")
for node in ["a", "c", "d"]:
if graph[node]:
print(node, "has neighbours")
print(len(graph), "c" in graph)
Что напечатает последняя строка?
- `3 True` — обращение `graph[node]` создало записи для отсутствующих ключей
- `1 False` — чтение не меняет словарь, фабрика вызывается только при явном присваивании
- `3 False` — записи создались, но оператор `in` у defaultdict не видит пустые значения
- `1 True` — записи не создались, но `in` возвращает True для любого ключа, ведь фабрика умеет его создать
