by default - everything is deep copied, except `ref` types (can be controlled with `byref` and `bycopy` pragmas on type or declaration) parameters are passed by value when small and passed by hidden pointer if compiler decides that it's faster it's all in the manual\: https://nim-lang.org/docs/manual.html#procedures-var-parameters @nocturn9x)