scopo das funções lambda e seus parâmetro

Preciso de uma função de retorno de chamada que seja quase exatamente a mesma para uma série de eventos da GUI. A função se comportará de maneira ligeiramente diferente, dependendo de qual evento a chamou. Parece um caso simples para mim, mas não consigo descobrir esse comportamento estranho das funções lambd

Então, eu tenho o seguinte código simplificado abaixo:

def callback(msg):
    print msg

#creating a list of function handles with an iterator
funcList=[]
for m in ('do', 're', 'mi'):
    funcList.append(lambda: callback(m))
for f in funcList:
    f()

#create one at a time
funcList=[]
funcList.append(lambda: callback('do'))
funcList.append(lambda: callback('re'))
funcList.append(lambda: callback('mi'))
for f in funcList:
    f()

A saída deste código é:

mi
mi
mi
do
re
mi

Eu esperava

do
re
mi
do
re
mi

Por que o uso de um iterador estragou tudo?

Tentei usar uma cópia em profundidade:

import copy
funcList=[]
for m in ('do', 're', 'mi'):
    funcList.append(lambda: callback(copy.deepcopy(m)))
for f in funcList:
    f()

Mas isso tem o mesmo problema.

questionAnswers(20)

yourAnswerToTheQuestion