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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta