Just look at the code here:
a = "James"
b = a
a = "Alfre"
print(a)
print(b)
The result:
Alfre
James
It does not look strange, I assigned variable b to variable a, which is a string. I reassigned a but not b, so it shows different results when print out, sounds logic.
But then you look more the code below:
c = [1, 2, 3]
d = c
c[0] = 8
print(c)
print(d)
The result:
[8, 2, 3]
[8, 2, 3]
What! What is going on? This is not making any sense, isn’t it?
I did not reassigned d, but how come it changes as well?
This is related to the Python Mutable and Immutable Principles.
Let’s draw some simple graphs to understand it:

when assigned a new variable b to variable a,
see as a new label b is created and point to the same memory location that a pointed.

String is immutable data type,
immutable means not able to modify the content on that memory location
either find another memory location, recreate the content and repoint.

here is the same process to assign d to c, a list data type.

But! List is a mutable data type, it can be changed content on the spot!
This also means that when you change the content of c, d will be changed as well.
Need to bare in mind that which kind of data type you are dealing with.
Hope the explanation is easy to understand, and welcome to discuss more.