Для начала замечу, что для сравнения есть два замечательных оператора
==
и
is
Первый проверяет равенство, тогда как второй идентичность
a = [1, 2, 3]
b = a
print(a == b) #True
print(a is b) #True
a = [1, 2, 3]
b = list(a)
print(a == b) #True
print(a is b) #False
Теперь что касается среза он дает доступ к диапазону коллекции, в случае с [:] всему диапазону. Он создает объект, а затем вставляет ссылки на объекты из оригинала. Это можно легко посмотреть добавив дочерние элементы, ссылки на них останутся старые и при изменении они изменятся в обоих списках
original_lst = [1, 2, [3, 4]]
lst = original_lst[:]
lst[2][1] = 5
print(original_lst[2] is lst[2]) #True
print(original_lst) #[1, 2, [3, 5]]
Чтобы создать полностью независимый объект стоит использовать модуль copy
from copy import deepcopy
original_lst = [1, 2, [3, 4]]
lst = deepcopy(original_lst)
lst[2][1] = 5
print(original_lst[2] is lst[2]) #False
print(original_lst) #[1, 2, [3, 4]]