Oi Daniel, tudo bem com você?
Um novo objeto não é criado. Normalmente um dicionário irá lançar um KeyError quando tentamos acessar uma chave que não há no dicionário. Exemplo:
dicionario = {}
print(dicionario[15])
Quando utilizamos o defaultdict, ele irá atribuir um valor padrão para chaves que não existam, porém, caso a mesma exista, ela não será criada novamente com o valor padrão, por isso no exemplo é retornado o mesmo endereço. Para saber se uma chave existe no dicionário podemos utilizar o in
, com isso podemos visualizar o exemplo do professor de forma mais clara, veja:
from collections import defaultdict
class Conta:
def __init__(self):
print("Criando conta nova")
contas = defaultdict(Conta)
print(f'Inicialmente possui a chave 15? {15 in contas}\n')
print(contas[15])
print(f'Possui a chave 15? {15 in contas}\n')
print(f'Tentando acessar a chave 15 novamente... Já possui a chave 15? {15 in contas}')
print(contas[15])
print(f'\nPossui a chave 17? {17 in contas}')
print(contas[17])
print(f'E agora? Possui a chave 17? {17 in contas}')
Resultado:
Inicialmente possui a chave 15? False
Criando conta nova
<__main__.Conta object at 0x02D9E4F0>
Possui a chave 15? True
Tentando acessar a chave 15 novamente... Já possui a chave 15? True
<__main__.Conta object at 0x02D9E4F0>
Possui a chave 17? False
Criando conta nova
<__main__.Conta object at 0x02D9EC10>
E agora? Possui a chave 17? True
Qualquer dúvida é só falar. Abraços e bons estudos!