When using DHCP, most routers allow individual IPv4 addresses to be assigned to specific devices. In my case, I do so for my Raspberry Pis, making Home Assistant accessible at a domain name rather than trying to remember an IP address.
I thought it strange that I couldn’t do the same for IPv6 addresses, until I learned how an IPv6 address is constructed. As it turns out, the last portion of the address is derived from the device’s network interface, essentially making it a reservation. The first portion is the prefix delegated by the ISP to the router. This has the practical effect of a consistent IPv6 address being used locally and externally, as well as eliminating the need to reserve IPv6 addresses.
You can see this in practice by visiting http://ipv6.whatismyip.akamai.com/ from multiple devices on the same local network. The first three fields are the prefix, the fourth is the subnet, and the last four are specific to the current device’s interface.
For a technical explanation, see https://docs.oracle.com/cd/E18752_01/html/816-4554/ipv6-overview-10.html.