>>> help(dict.setdefault)
setdefault(self, key, default=None, /)
Insert key with a value of default if key is not in the dictionary.
Return the value for key if key is in the dictionary, else default.
Один пустой диктант не обязательно совпадает с объектом другого пустого диктанта. Происходит следующее: строка
temp_dict = temp_dict.setdefault(letter, dict())
сначала добавляет новый ключ к текущему temp_dict
(с соответствующим значением, являющимся пустым диктом), а затем возвращает ссылку на этот новый добавленная стоимость . Когда он запускается в l oop, он заканчивает тем, что рекурсивно добавляет новые словари к тому, чем был оригинал (то есть self.trie
).
Поскольку вложенный dict
, который мы модифицируем, содержится в пределах self.trie
мы можем видеть наше изменение, отраженное в self.trie
.
Это может помочь разложить это утверждение:
temp_dict = temp_dict.setdefault(letter, dict())
на следующее:
if letter not in temp_dict:
temp_dict[letter] = dict() # create a new dict, and put it inside the current dict
temp_dict = temp_dict[letter] # jump inside the new dict that we just created,
# or the existing dict that was there if it already existed.