Проблема в том, что значение по умолчанию необязательного аргумента - это только один экземпляр. Поэтому, например, если вы скажете def __init__(self, value, c=[]):, этот же список [] будет передаваться в метод каждый раз, когда необязательный аргумент будет использоваться вызывающим кодом.
Поэтому, в основном, вы должны использовать только неизменяемые типы дат, такие как None для значения по умолчанию необязательного аргумента. Например:
def __init__(self, value, c=None):
Тогда вы можете просто создать новый список в теле метода: