On 12-04-13 8:32 PM, Whit Armstrong wrote:
Is putting a variable into a list a deep copy (and is tracemem the
correct way to confirm)?
Yes, it is a deep copy, but done in a lazy way so tracemem won't show
it. The copying won't be done until necessary, i.e. you modify it.
warmstrong@krypton:~/dvl/R.packages$ R
x<- rnorm(1000)
tracemem(x)
[1] "<0x3214c90>"
x.list<- list(x.in.list=x)
tracemem[0x3214c90 -> 0x2af0a20]:
Is it possible to put a variable into a list without causing a deep
copy (i.e. if you _really_ want the objects to share the same
underlying memory)?
At R level you can simulate it by storing things in environments: they
aren't copied when you do assignments. So
x <- list(a=1, b=new.env())
y <- x
will cause x$a and y$a to be different objects, but x$b and y$b will be
the same thing.
It may be possible to do it with other types in C code, but it will
likely cause corruption when the garbage collector cleans up one copy.
At C level you can do what you like with memory that isn't being managed
by R.
Duncan Murdoch
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.