1
resposta

Novo objeto ou não?

No tempo 02:48, quando a conta[15] é chamada novamente, o instrutor diz que é "uma outra conta", mas o resultado da execução não mostra isso: volta o objeto conta no mesmo endereço da primeira chamada de conta[15].

Um novo objeto é criado ou não?

1 resposta

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!