Не знаю, специфична ли эта вещь для всего Python или только для PyQt, но у меня проявилось при использовании PyQt.
def createimg():
pixels = '...' # пиксели в строковой переменной
return QtGui.QImage(pixels, 158, 54, QtGui.QImage.Format_RGB32)
Таким образом из функции возвращается объект QImage, но pixels в нём уже нет. Проверяется путем сохранения картинки методом save(). Сохраняется рябь вместо изображения.
Как понимаю, здесь в функции в конструктор QImage передаётся указатель на строку pixels, соответственно, когда при возврате происходит выход из функции переменная pixels удаляется, указатель становится невалидным и проявляется наблюдаемый эффект.
Решается таким костылём:
def createimg():
pixels = '...' # пиксели в строковой переменной
return QtGui.QImage(pixels, 158, 54, QtGui.QImage.Format_RGB32), pixels
Т.е. вместе с объектом возвращаем и источник пикселей, чтобы он не удалился. Есть ли способы прямее?