Existem diferenças aplicáveis entre dict.items()
e dict.iteritems()
?
Nos documentos do Python :
dict.items()
: Retorna uma cópia da lista do dicionário de pares (chave, valor).
dict.iteritems()
: Retorna um iterador sobre os pares do dicionário (chave, valor).
Se eu executar o código abaixo, cada um deles retornará uma referência ao mesmo objeto. Faltam algumas diferenças sutis?
#!/usr/bin/python
d={1:'one',2:'two',3:'three'}
print 'd.items():'
for k,v in d.items():
if d[k] is v: print '\tthey are the same object'
else: print '\tthey are different'
print 'd.iteritems():'
for k,v in d.iteritems():
if d[k] is v: print '\tthey are the same object'
else: print '\tthey are different'
Resultado:
d.items():
they are the same object
they are the same object
they are the same object
d.iteritems():
they are the same object
they are the same object
they are the same object
d[k] is v
sempre retornaria True porque python mantém uma matriz de objetos inteiros para todos os números inteiros entre -5 e 256: docs.python.org/2/c-api/int.html Quando você cria um int nesse intervalo, na verdade, basta voltar uma referência ao objeto existente: >> a = 2; b = 2 >> a is b True
Mas,>> a = 1234567890; b = 1234567890 >> a is b False
iteritems()
para iter()
no Python 3? O link da documentação acima parece não corresponder a esta resposta.
items()
cria os itens de uma só vez e retorna uma lista.iteritems()
retorna um gerador - um gerador é um objeto que "cria" um item de cada vez quenext()
é chamado a ele.