always deep copy JsonObject/JsonElement in copy() otherwise it's hard to ensure using flags that the original and copy don't see changes in each other, especially when we consider that JsonObject/JsonArray can contain nested JsonObject/JsonArray