dt = data.table(a = 1:3)
address(dt$a)
#[1] "000000000EB62368"
# good
dt[1, a := a + a]
address(dt$a)
#[1] "000000000EB62368"
# good
dt[1:3, a := a + a]
address(dt$a)
#[1] "000000000EB62368"
# bad
dt[, a := a + a]
address(dt$a)
#[1] "000000000E6F2930"