Выбор ответа Middle Коллекции обновлено

Ловушка dict.fromkeys со списком

Вопрос

Что выведет print(d)?

d = dict.fromkeys(['a', 'b'], [])
d['a'].append(1)
print(d)

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: {'a': [1], 'b': [1]}. dict.fromkeys(keys, value) кладёт один и тот же объект во все ключи.

Варианты ответа

  1. {'a': [1], 'b': [1]}правильный ответ
  2. {'a': [1], 'b': []}
  3. TypeError: unhashable type: 'list'
  4. {'a': 1, 'b': []}

Разбор

dict.fromkeys(keys, value) кладёт один и тот же объект во все ключи. Список общий, поэтому append через ключ a виден и через b. Нужны независимые списки: {k: [] for k in keys} или defaultdict(list).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.