To demonstrate what a shallow copy means:
a = [ [1,2], [3,4,5] ]
b = a[:]
a is b
=> False
a == b
=> True
a[0] is b[0]
=> True
A change in structure awill not be reflected in b, because this is a copy:
a.pop()
len(a)
=> 1
len(b)
=> 2
: , a ( a) , b, b , a.
a[0][0] = 'XYZ'
b[0]
=> ['XYZ', 2]