data.table(DT)を作り、DT1にそれを代入する。 通常のRだとDTと同じ構造のDT1ができるというイメージ。

library(data.table)
DT <- data.table(ID=letters[1:5], value=1:5)
DT1 <- DT
all.equal(DT1, DT)
## [1] TRUE

DTの一部の列(value)を変更してみる。

DT[, value:=value*2]
##    ID value
## 1:  a     2
## 2:  b     4
## 3:  c     6
## 4:  d     8
## 5:  e    10

これでDTとDT1は違うものになっていると思いきやそうではない。

all.equal(DT1, DT)
## [1] TRUE

確認するとDT1も変更されている。

DT1
##    ID value
## 1:  a     2
## 2:  b     4
## 3:  c     6
## 4:  d     8
## 5:  e    10

R以外の他の言語では当たり前の参照渡しというだけなのだがRしか知らないと混乱すると思う。参照渡しについては例えば以下参照。

http://magazine.rubyist.net/?0032-CallByValueAndCallByReference

なお、Pythonのpandasも参照渡しだったりするので注意。以下参考まで。

http://nbviewer.ipython.org/gist/piroyoung/d3f078ed8c751246e03a