Так это работает в питоне. В значение по умолчанию нельзя указывать изменяемый тип. Он создается один раз как поле функции, и при каждом вызовое функции будет этот один и тот же объект.
можно делать так:
def __init__(self, elements=None):
self.elements = elements or list()