Я не уверен, что это утверждение остается верным. Давайте взглянем на .Internal(inspect())
.
. Рассмотрим следующее:
x <- 1L
x[[1]] <- 2L
x
#[1] 2
Если мы используем .Internal(inspect(x))
:
.Internal(inspect(x))
#@7fa684891478 13 INTSXP g0c1 [NAM(1)] (len=1, tl=0) 2
Мы видим на основе [NAM(1)]
что существует только один символ, относящийся к адресу 7fa684891478
.
Теперь давайте присвоим x
y
.
y <- x
.Internal(inspect(y))
#@7fa684891478 13 INTSXP g0c1 [NAM(2)] (len=1, tl=0) 2
.Internal(inspect(x))
#@7fa684891478 13 INTSXP g0c1 [NAM(2)] (len=1, tl=0) 2
Мы видим, что y
и x
совместно используют один и тот же адрес памяти, а [NAM()]
равно 2.
Теперь давайте назначим x
на z
.
z <- x
.Internal(inspect(x))
#@7fa684891478 13 INTSXP g0c1 [NAM(3)] (len=1, tl=0) 2
Независимо от того, даже если мы удалим символы указывая на 7fa684891478
, [NAM()]
никогда не увеличивается.
rm(z)
.Internal(inspect(x))
#@7fa684891478 13 INTSXP g0c1 [NAM(3)] (len=1, tl=0) 2
R.Version()
#...
#$version.string
#[1] "R version 3.6.3 (2020-02-29)"