Neither cbind() nor data.frame, with variables added or variable names changed insulate original data frame from modifications made by set() function of data.table to copy of data frame.
> library(data.table)
> # changing name of variable in copy doesn't work, emp modified
> (emp <- data.frame(type=c('a','b','c'),amt=as.numeric(c(1,2,3))))
  type amt
1    a   1
2    b   2
3    c   3
> (dd <- cbind(emp,dv=''))
  type amt dv
1    a   1   
2    b   2   
3    c   3   
> names(dd)[names(dd)=='type'] <- 'tp'
> i <- which(dd$tp=='a'); set(dd,i,'tp','alpha')
> i <- which(dd$tp=='b'); set(dd,i,'tp','beta')
> i <- which(dd$tp=='c'); set(dd,i,'tp','chi')
> dd
     tp amt dv
1 alpha   1   
2  beta   2   
3   chi   3   
> emp
   type amt
1 alpha   1
2  beta   2
3   chi   3
> dd$dv <- factor(dd$dv)
> table(dd$dv)
> table(emp$type)
    a     b     c alpha  beta   chi 
    0     0     0     1     1     1 
> tracemem(dd)==tracemem(emp)
[1] FALSE
> 
> # same w/ data.frame doesn't work, emp still modified
> (emp <- data.frame(type=c('a','b','c'),amt=as.numeric(c(1,2,3))))
  type amt
1    a   1
2    b   2
3    c   3
> (dd <- data.frame(emp,dv=1))
  type amt dv
1    a   1  1
2    b   2  1
3    c   3  1
> names(dd)[names(dd)=='type'] <- 'tp'
> i <- which(dd$tp=='a'); set(dd,i,'tp','alpha')
> i <- which(dd$tp=='b'); set(dd,i,'tp','beta')
> i <- which(dd$tp=='c'); set(dd,i,'tp','chi')
> dd$tp <- factor(dd$tp)
> table(dd$tp)
alpha  beta   chi 
    1     1     1 
> table(emp$type)
    a     b     c alpha  beta   chi 
    0     0     0     1     1     1 
> tracemem(dd)==tracemem(emp)
[1] FALSE
> 
> # only modifying new variable insulates emp
> (emp <- data.frame(type=c('a','b','c'),amt=as.numeric(c(1,2,3))))
  type amt
1    a   1
2    b   2
3    c   3
> (dd <- cbind(emp,dv=''))
  type amt dv
1    a   1   
2    b   2   
3    c   3   
> names(dd)[names(dd)=='type'] <- 'tp'
> i <- which(dd$tp=='a'); set(dd,i,'dv','alpha')
> i <- which(dd$tp=='b'); set(dd,i,'dv','beta')
> i <- which(dd$tp=='c'); set(dd,i,'dv','chi')
> dd
  tp amt    dv
1  a   1 alpha
2  b   2  beta
3  c   3   chi
> emp
  type amt
1    a   1
2    b   2
3    c   3
> table(emp$type)
a b c 
1 1 1 
> tracemem(dd)==tracemem(emp)
[1] FALSE
>