Let's have:
DT1 <- data.table(iris)
DT2 <- DT1 # both reference the same memory location though
DT3 <- copy(DT1)
Question: Is there a way to check that DT2
keeps referencing the same memory location as DT1
?
Something like this pseudo-function:
mem.identical(DT2, DT1) # should return TRUE
mem.identical(DT3, DT1) # should return FALSE
Unfortunately, identical
or all.equal
don't work for this purpose, because
identical(DT1,DT3) # gives TRUE
Only after introducing some change, the difference can be detected using identical
:
DT1[,Test:=1] # introduces change to DT1 directly, to DT2 indirectly
identical(DT1,DT2) # TRUE - proves that DT2 is linked with DT1
identical(DT1,DT3) # FALSE - DT1 and DT3 are clearly decoupled