new_list = my_list, any modifications to new_list changes my_list every time. Why is this?new_list = my_list, you don't actually have two lists. The assignment just copies the reference to the list, not the actual list, so both new_list and my_list refer to the same list after the assignment.list.copy() method (available since Python 3.3):list() function:copy.copy():list() because it has to find out the datatype of old_list first.copy.deepcopy():