Dict dentro de defaultdict que se comparte entre claves
Tengo un diccionario dentro de un defaultdict. Noté que el diccionario se comparte entre claves y, por lo tanto, toma los valores de la última escritura. ¿Cómo puedo aislar esos diccionarios?
>>> from collections import defaultdict
>>> defaults = [('a', 1), ('b', {})]
>>> dd = defaultdict(lambda: dict(defaults))
>>> dd[0]
{'a': 1, 'b': {}}
>>> dd[1]
{'a': 1, 'b': {}}
>>> dd[0]['b']['k'] = 'v'
>>> dd
defaultdict(<function <lambda> at 0x7f4b3688b398>, {0: {'a': 1, 'b': {'k': 'v'}}, 1:{'a': 1, 'b': {'k': 'v'}}})
>>> dd[1]['b']['k'] = 'v2'
>>> dd
defaultdict(<function <lambda> at 0x7f4b3688b398>, {0: {'a': 1, 'b': {'k': 'v2'}}, 1: {'a': 1, 'b': {'k': 'v2'}}})
Darse cuenta dev
se estableció env2
para ambos diccionarios. ¿Porqué es eso? y cómo cambiar este comportamiento sin mucha sobrecarga de rendimiento?