Примечание: это было частью гораздо большего, более сложного фрагмента кода, где эта единственная строка кода имела смысл с учетом контекста. Я знаю, что могу просто написать 1 в списке.
Код, на который я ссылаюсь, взят из другого вопроса: Как реализовать эффективную двунаправленную хэш-таблицу?
В любом случае, я не понимаю, почемуВозвращаемое значение - список, к которому можно добавить, и почему это изменение отражено в списке, содержащемся в словаре. Насколько я знаю, возвращаемое значение было в некоторой степени копией списка, а не того же самого списка в словаре:
>>> dict = {}
>>> dict.setdefault("a",[]).append(1)
>>> print(dict)
>>> {"a": [1]}
Сначала я думал, что это потому, что возвращенный список возвращается только послевыполнение строки, которое, казалось, имело большой смысл, поэтому чтобы проверить это, я присвоил результат dict.setdefault ("a", []) переменной:
>>> dict = {}
>>> l = dict.setdefault("a",[])
>>> l.append(1)
>>> print(l)
>>> [1]
>>> print(dict)
>>> {"a": [1]}
Что ещенезнакомец, это то, что добавление в список напрямую не работает. Под прямым понятием я имею в виду следующее:
>>> dict = {}
>>> dict.setdefault("a",[].append(1))
>>> print(dict)
>>> {"a": None}
Так что я не ожидал, что это станет возможным, это то, что на самом деле произошло (изменение возвращаемого значения с внесением этого изменения в копию этого значения), и чтоЯ подумал, что это невозможно (добавление непосредственно в список).
Если кто-то знает, почему это так, и в документации по Python я могу прочитать больше об этом поведении, чтобы углубить мое понимание, чтобудет принята с благодарностью.
Спасибо.