I am reading Hadley's Advanced R, and I have a question regarding modify in place. In the section Modify-in-place, it is mentioned when objects have single binding they are modified in place. Also reflected by the image, by mentioning that v has same id.

But when I tried to recreate this example in my pc, I get different address:
l = c(1,2,3,4)
tracemem(l)
#> [1] "<0000000018166270>"
l[[1]] = 2
#> tracemem[0x0000000018166270 -> 0x0000000013b34850]: eval eval withVisible withCallingHandlers doTryCatch tryCatchOne tryCatchList tryCatch try handle timing_fn evaluate_call <Anonymous> evaluate in_dir block_exec call_block process_group.block process_group withCallingHandlers process_file <Anonymous> <Anonymous> <Anonymous> <Anonymous> do.call saveRDS withCallingHandlers doTryCatch tryCatchOne tryCatchList doTryCatch tryCatchOne tryCatchList tryCatch
I was expecting l to have same object address (as shown in the book), perhaps I misunderstood?
So the question I have is: How does modify in place work in R?