Важно отметить, что отсутствующий базовый случай в вашем коде является тестом, если оба списка пусты.
Другим важным фактором является избегание удаления найденного элемента из любого из обоих полученных списков, посколькукоторые могут изменить их после вызова.
Это тот же код, что и ваш, с наименьшим количеством возможных модификаций, на мой взгляд:
def SameStuff(list1,list2):
if len(list1)!=len(list2):
return False
if len(list1) == 0 and len(list2) == 0:
return True
if list1[0] in list2:
list2b = list2[:]
list2b.remove(list1[0])
return SameStuff(list1[1:], list2b)
else:
return False
print(SameStuff(['Hello',1,2,3], [3,2,1,'Hello']))
print(SameStuff(['HELLO',1,2,3],[3,'two',1,'Hello']))
print(SameStuff([1,2],[]))