#[derive(Debug)] enum List { Cons(Rc>, Rc), Nil, } use List::{Cons, Nil}; use std::rc::Rc; use std::cell::RefCell; fn main() { let value = Rc::new(RefCell::new(5)); let a = Rc::new(Cons(Rc::clone(&value), Rc::new(Nil))); println!("a before = {:?}", a); let b = Cons(Rc::new(RefCell::new(6)), Rc::clone(&a)); println!("b before = {:?}", b); let c = Cons(Rc::new(RefCell::new(10)), Rc::clone(&a)); println!("c before = {:?}", a); *value.borrow_mut() += 10; println!("a after = {:?}", a); println!("b after = {:?}", b); println!("c after = {:?}", c); }