Box has a single owner. But sometimes a value genuinely needs multiple owners — a node referenced from several places, shared config read by many parts. Rc<T> (reference counted) makes that safe.
Shared ownership by counting
Rc<T> keeps a count of how many owners exist. Rc::clone doesn't copy the data — it bumps the count and hands out another handle to the same value. When each owner drops its Rc, the count drops; when it hits zero, the value is freed. Multiple owners, exactly one deallocation, all automatic.
Rc::clone is cheap
Rc::clone(&x) is the idiomatic spelling (rather than x.clone()) precisely because it signals 'this is a cheap refcount bump, not a deep copy.' It copies a pointer and increments a counter — nothing more. Reading Rc::clone tells the reader 'shared ownership here,' which a bare .clone() would hide.
The catch: Rc is read-only
Rc<T> gives you shared, immutable access. You can't get a &mut through it, because multiple owners plus mutation would violate aliasing XOR mutation. To mutate shared data, you pair Rc with RefCell — which is exactly the next lesson, and the reason interior mutability exists.