Memory-address persistence

When I tostring a table/userdata, the last few numbers stay the same as long as the Roblox instance is running.

Example:

-- In Roblox Studio (Command Bar) (Play-testing)
print(newproxy()) -- userdata: 0xe72a967fa68bebb8
print(tostring({})) -- table: 0x14491f3355dafc28
print(tostring(game:GetDescendants())) -- table: 0x21cdc6d1851b8b38
-- 8

-- Later... (Same script/scenario)
-- userdata: 0xae94a7f0f054a969
-- table: 0x2d341695ab3d50b9
-- table: 0xcae92e24d0382ea9
-- 9

The address are still different for the first few numbers, but the end stays the same.
Why/How does this happen?

After some researching, the reason why last digits wont change its because Roblox aligns variables to specific boundaries per session, it means, it will set boundaries until you restart the program