Deep clone and merge nested Kotlin maps

Kotlin
@Suppress("UNCHECKED_CAST")
fun deepClone(value: Any?): Any? = when (value) {
    is Map<*, *> -> value.entries.associate { it.key to deepClone(it.value) }
    is List<*> -> value.map { deepClone(it) }
    else -> value
}

@Suppress("UNCHECKED_CAST")
fun deepMerge(base: Map<String, Any?>, patch: Map<String, Any?>): Map<String, Any?> =
    (base.keys + patch.keys).associateWith { key ->
        val old = base[key]
        val new = patch[key]
        if (old is Map<*, *> && new is Map<*, *>) {
            deepMerge(old as Map<String, Any?>, new as Map<String, Any?>)
        } else {
            deepClone(if (key in patch) new else old)
        }
    }

val config = deepMerge(mapOf("db" to mapOf("host" to "a")), mapOf("db" to mapOf("port" to 1)))