Une erreur de segmentation Python?

Cela génère un Segmentation Fault: 11 et je n'ai aucune idée pourquoi.

Avant d'entrer en elle, voici le code:

import numpy.random as nprnd
import heapq
import sys

sys.setrecursionlimit(10**6)


def rlist(size, limit_low, limit_high):
    for _ in xrange(size): 
        yield nprnd.randint(limit_low, limit_high)

def iterator_mergesort(iterator, size):
    return heapq.merge(
         iterator_mergesort(
           (iterator.__next__ for _ in xrange(size/2)), size/2),
         iterator_mergesort(
            iterator, size - (size/2))
       )

def test():
    size = 10**3
    randomiterator = rlist(size, 0, size)
    sortediterator = iterator_mergesort(randomiterator, size)
    assert sortediterator == sorted(randomiterator)

if __name__ == '__main__':
    test()

Fondamentalement, c'est juste un mergesort qui fonctionne sur les itérateurs et générateur d'expressions au lieu de travailler sur des listes de manière à minimiser l'empreinte mémoire à tout moment. C'est rien de spécial, et utilise le heapq.merge() méthode intégrée pour la fusion des itérateurs, j'ai donc été très surpris quand tout se casse.

L'exécution du code donne rapidement Segmentation Fault: 11 et une fenêtre d'erreur me disant python s'est écrasé. Je n'ai aucune idée de où chercher ni comment déboguer, de telle sorte que toute aide serait grandement appréciée.

source d'informationauteur reem