Values are stored in memory.
So somewhere in memory there’s some value/data that you can use, right.
In order to access that value, you need a reference to that value.
You can have multiple references to the same value, that’s like writing down a street address on several slips of papers, nothing weird there.
You have five references to the same list.
This is often desirable, because it’s expensive to make copies all the time, better just to say where the value is in memory.
So for example, if you do:
a = b
a will now refer to the very same value as
b. Not a copy, the same.
There’s an operator that tests if two values are the same,
is. You probably won’t find it very useful for your purposes, but it exists.
If you do need a copy, then you can create a copy, and and keep both references. Exactly how that’s done depends on the data that is copied, but for most that’ll be calling the value’s type with the value as an argument, so if
a is a list, that would be:
b = list(a)
Not all values can change, and so there would be little to no point in having multiple instances of them. Two examples of this are:
str - they cannot ever be changed, only replaced. That might sound like a hindrance, but it’s more of a guarantee that something won’t change. If you would need to change it, then there will most likely be another data type for that purpose.
There are even a couple of values of which there only exists a single instance.
False or examples of this, as well as
None, and Python may also take the liberty of doing this with integers and strings - since they are immutable anyway.