Usando expressão lambda para conectar slots no pyqt

Estou tentando conectar slots com funções lambda, mas não está funcionando da maneira que eu esperava. No código abaixo, consigo conectar os dois primeiros botões corretamente. Nos dois segundos, que eu conecto em um loop, isso dá errado. Alguém antes de mim teve a mesma pergunta (Qt - Conectar slot com argumento usando lambda), mas esta solução não funciona para mim. Estou encarando minha tela há meia hora, mas não consigo descobrir como meu código é diferente.

class MainWindow(QtGui.QWidget):
    def __init__(self):
        super(QtGui.QWidget, self).__init__()

        main_layout = QtGui.QVBoxLayout(self)

        # Works:
        self.button_1 = QtGui.QPushButton('Button 1 manual', self)
        self.button_2 = QtGui.QPushButton('Button 2 manual', self)
        main_layout.addWidget(self.button_1)
        main_layout.addWidget(self.button_2)

        self.button_1.clicked.connect(lambda x:self.button_pushed(1))
        self.button_2.clicked.connect(lambda x:self.button_pushed(2))

        # Doesn't work:
        self.buttons = []
        for idx in [3, 4]:
            button = QtGui.QPushButton('Button {} auto'.format(idx), self)
            button.clicked.connect(lambda x=idx: self.button_pushed(x))
            self.buttons.append(button)
            main_layout.addWidget(button)


    def button_pushed(self, num):
        print 'Pushed button {}'.format(num)

Pressionando os dois primeiros botões, obtém-se o botão 1 e o botão 2, os outros dois produzem o botão False, embora eu esperasse 3 e 4.

Eu também não entendi o mecanismo lambda completamente. O que exatamente fica conectado? Um ponteiro para uma função gerada pelo lambda (com o parâmetro substituído em) ou a função lambda é avaliada sempre que o sinal disparar?

questionAnswers(3)

yourAnswerToTheQuestion