"Immutable data structures (like lists in Lisp) don't have these issues."
Lists in Lisp are mutable (in almost all dialects, from the original 1950s LISP to Common Lisp). You will also have bad issues if you mutate the cells of lists in Lisp, when there are other references starting at different cells inside the list. List-mutating forms in the standard library directly warn about the inputs being destroyed, hence to use the newly returned head instead of holding on to old pointers.
(It's befuddling how often Lisp gets mentioned on HN, and how often it's wrong.)
Maybe it comes from academia. Lisps are used to teach recursive program and step into purely functional idioms. I wasn't introduced to the effectful APIs or libraries. Only car, cdr and recursion as primitive means. Also history rarely reports Lisp being imperative. McCarthy first paper shows a functional structural symbolic derivator, he was said to be a proponent of recursion when nobody cared, I think Richard Gabriel said the `progn` form was introduced a-posteriori to satisfy FORTRAN programmers. I've read only once that Lisp was planned to have imperative traits from the start. So it's not unnatural to think of Lisp as a mostly pure recursive language that caved in to allow side-effects (just like ML has Ref types when it makes sense). It's a bit Edisonian in how simplified the story has been.
Lists in Lisp are mutable (in almost all dialects, from the original 1950s LISP to Common Lisp). You will also have bad issues if you mutate the cells of lists in Lisp, when there are other references starting at different cells inside the list. List-mutating forms in the standard library directly warn about the inputs being destroyed, hence to use the newly returned head instead of holding on to old pointers.
(It's befuddling how often Lisp gets mentioned on HN, and how often it's wrong.)