Как насчет
np.unique(itertools.permutations([1, 1, 1]))
Проблема заключается в том, что теперь перестановки представляют собой строки массива Numpy, тем самым используя больше памяти, но вы можете циклически их перемещать по-прежнему
perms = np.unique(itertools.permutations([1, 1, 1]))
for p in perms:
print p