Ответ
При увеличении map в Go происходит rehashing — перераспределение элементов по новым бакетам с увеличением памяти. Это нужно, чтобы сохранить эффективность операций (вставки, поиска).
Пример:
m := make(map[string]int, 1) // начальный размер 1
m["a"] = 1
m["b"] = 2 // может вызвать rehashing, если превышен load factor (~6.5)
Нюансы:
- Рехешинг автоматический, но затратный (O(n))
- Старые бакеты постепенно копируются в новую память
- В процессе могут временно сосуществовать старый и новый массив бакетов