Dictionary con valores Lambda actualiza todas las entradas
Estoy en Python 2.7. Tengo dos clases y una llamada tupla. Una clase alberga un diccionario como un atributo de instancia y una función que se asigna a ese diccionario. (Esta es una versión muy simplificada de la situación). El namedtuple es bastante simple. La otra clase es una que agrega entradas entest_dict
mediante eladd_to_test_dict
Llamada de función
Entonces ejemplifico DictManipulator y llamo altest
función:
from collections import namedtuple
class DictHolder(object):
def __init__(self):
self.test_dict = {}
def add_to_test_dict(self, key, val):
self.test_dict[key] = val
TestTuple = namedtuple('TestTuple', 'name data')
class DictManipulator(object):
def test(self):
named_tuple_list = [TestTuple(name='key1', data=1), TestTuple(name='key2', data=1000)]
self.my_dh = DictHolder()
for item in named_tuple_list:
self.my_dh.add_to_test_dict(item.name, lambda: item.data)
my_dm = DictManipulator()
my_dm.test()
print('key1 value: ', my_dm.my_dh.test_dict['key1']())
print('key2 value: ', my_dm.my_dh.test_dict['key2']())
# ('key1 value: ', 1000)
# ('key2 value: ', 1000)
¿Por qué ambas teclas devuelven el mismo valor allí? He experimentado lo suficiente como para decir que el original named_tuple_list no está actualizado, y he tratado de usarlambda: copy.deepcopy(item.data)
, pero eso tampoco funciona. Muchas gracias amigos.