Фактически, вы удаляете объекты из списка, просматривая список. Прочтите Как удалить элементы из списка во время итерации? , для получения дополнительной информации об этом топе c.
Создайте мелкую копию списка (Ball.ball_list[:]
, см. Подробнее о списках ) и перебирать по копии списка, удаляя элементы из исходного списка:
def new_game():
global game_over, score
for actor in Ball.ball_list[:]:
actor.kill()
score = 0
game_over = False
В любом случае, поскольку вы хотите удалить все элементы из списка, достаточно вызовите clear()
Ball.ball_list.clear()
или для удаления всех элементов (см. del
)
del Ball.ball_list[:]
соответственно, чтобы создать новый и пустой список
Ball.ball_list = []
Обратите внимание: память объектов, которые не используются, освобождается сборкой мусора , поэтому достаточно удалить объект из (всех) списков. Кроме того, нет необходимости сбрасывать атрибуты объектов, которые будут уничтожены.