Thanks for the link, I've read bits and pieces but not that specific page. I started playing with lobstr after watching this video. The only example I see that discusses the global string pool is:
banana <- "bananas bananas bananas"
obj_size(banana)
obj_size(rep(banana, 100))
Which produces the same results when using object.size. So I'm still confused why c() makes lobstr behave the way it does.
Edit: I think ref makes it a little clearer to me or at least visually explains why y is larger than z:
library(lobstr)
x <- runif(1e6)
y <- list(c(x), x)
z <- list(x, x)
ref(y)
#> █ [1:0x7ff5715eb708] <list>
#> ├─[2:0x1089d1000] <dbl>
#> └─[3:0x106327000] <dbl>
ref(z)
#> █ [1:0x7ff5714ba248] <list>
#> ├─[2:0x106327000] <dbl>
#> └─[2:0x106327000]