fixed = [(pos, item) for pos, item in enumerate(items) if item.freeze]
random.shuffle(items)
for pos, item in fixed:
    index = items.index(item)
items[pos], items[index] = items[index], items[pos]
Python: перетасовка списка, но сохранение некоторых элементов замороженными