Просто как школьник попался на маленькой мелочи, на которой стыдно попадаться помидору. Потратил 3 часа жизни, так как возможности дебажить не было.

self.layers: Dict[int, List[FuckingObject]] = dict.fromkeys(list(range(0, self.layers_count)), [])

Казалось бы, что может пойти не так)

Вроде мелочь, а грустно. Так много мог сделать за вечер полезного. А как у вас дела?)

  • ThePlayerZero
    link
    fedilink
    arrow-up
    0
    ·
    3 years ago

    Прикольная грабля, мне понравилась

    В целом данная грабля является лишь более мудрёным вариантом стандартной питоновской грабли

    input:

    x = [1]
    y = x
    x += [2]
    print (x)
    print (y)
    

    output:

    [1, 2]
    [1, 2]
    

    Поскольку принимая единственный единственный value в dict.fromkeys (keys, value), питон просто не может сделать иначе, даже если бы захотел

    Почему не может? Потому что альтернативой было бы звать __copy__() или тем более __deepcopy__() (какой из двух кстати звать?) в количестве len(keys)-1 раз от value.

    В свою очередь, это может привести к непредсказуемым последствиям на кастомных классах, хотя и выглядит очень уместным непосредственно для list из встроенных типов, типа чисел