Comprender exactamente cuándo una tabla de datos es una referencia a (frente a una copia de) otra tabla de datos.

Me está costando entender las propiedades de paso por referencia dedata.table. Algunas operaciones parecen "romper" la referencia, y me gustaría entender exactamente qué está sucediendo.

Al crear undata.table&nbsp;de otrodata.table&nbsp;(vía<-, luego actualizando la nueva tabla por:=, la mesa original también se altera. Esto se espera, según:

?data.table::copy&nbsp;ystackoverflow: paso-por-referencia-el-operador-en-el-paquete-tabla-de-datos

Aquí hay un ejemplo:

library(data.table)

DT <- data.table(a=c(1,2), b=c(11,12))
print(DT)
#      a  b
# [1,] 1 11
# [2,] 2 12

newDT <- DT        # reference, not copy
newDT[1, a := 100] # modify new DT

print(DT)          # DT is modified too.
#        a  b
# [1,] 100 11
# [2,]   2 12

Sin embargo, si inserto un:=&nbsp;modificación basada entre la<-&nbsp;asignación y la:=&nbsp;líneas arribaDT&nbsp;Ahora ya no se modifica:

DT = data.table(a=c(1,2), b=c(11,12))
newDT <- DT        
newDT$b[2] <- 200  # new operation
newDT[1, a := 100]

print(DT)
#      a  b
# [1,] 1 11
# [2,] 2 12

Así que parece que lanewDT$b[2] <- 200&nbsp;La línea de alguna manera 'rompe' la referencia. Supongo que esto invoca una copia de alguna manera, pero me gustaría entender completamente cómo R está tratando estas operaciones, para asegurarme de no introducir posibles errores en mi código.

Apreciaría mucho si alguien me pudiera explicar esto.