为什么在函数体内部发生修改时TraceMe显示两个副本?

为什么在函数体内部发生修改时TraceMe显示两个副本?,r,function,copy,R,Function,Copy,在R REPL中: R version 3.6.1 (2019-07-05) -- "Action of the Toes" > foo <- function (x) x[[1]] <- 0 > a <- 1L:3L > tracemem(a) [1] "<0x55d5470e4940>" > foo(a) tracemem[0x55d5470e4940 -> 0x55d545e11808]: foo tracemem[0x55d5

在R REPL中:

R version 3.6.1 (2019-07-05) -- "Action of the Toes"
> foo <- function (x) x[[1]] <- 0
> a <- 1L:3L
> tracemem(a)
[1] "<0x55d5470e4940>"
> foo(a)
tracemem[0x55d5470e4940 -> 0x55d545e11808]: foo 
tracemem[0x55d545e11808 -> 0x55d5470050c8]: foo
R版本3.6.1(2019-07-05)-“脚趾的动作”
>福福(a)
TraceMe[0x55d5470e4940->0x55d545e11808]:foo
TraceMe[0x55d545e11808->0x55d5470050c8]:foo
我无法理解为什么会有两份副本以及它们何时出现。

根据joran的评论: 双拷贝与函数调用无关,但它是由整数向量转换为双向量
b[[1]]a traceem(a)引起的
[1] ""
>b[1]]0x556c46e1e788]:
tracemem[0x556c46e1e788->0x556C4801218]:
现在有
b[[1]]a轨迹(a)
[1] ""
>b[1]]0x556c46e1e908]:
>
根据joran的评论: 双拷贝与函数调用无关,但它是由整数向量转换为双向量
b[[1]]a traceem(a)引起的
[1] ""
>b[1]]0x556c46e1e788]:
tracemem[0x556c46e1e788->0x556C4801218]:
现在有
b[[1]]a轨迹(a)
[1] ""
>b[1]]0x556c46e1e908]:
>
> a <- 1L:3L
> tracemem(a)
[1] "<0x556c48022f70>"
> b <- a
> b[[1]] <- 0
tracemem[0x556c48022f70 -> 0x556c46e1e788]: 
tracemem[0x556c46e1e788 -> 0x556c48012118]: 
> a <- 1L:3L
> tracemem(a)
[1] "<0x556c480f3100>"
> b <- a
> b[[1]] <- 0L
tracemem[0x556c480f3100 -> 0x556c46e1e908]: 
>