Tkinter pyimage no existe

Sé que hay muchas preguntas similares, pero no hay ninguna lo suficientemente simple que pueda entender. Tengo el siguiente código:

import Tkinter as tk
from PIL import Image, ImageTk

class MainWindow:
    def __init__(self, master):
        canvas = Canvas(master)
        canvas.pack()
        self.pimage = Image.open(filename)
        self.cimage = ImageTk.PhotoImage(self.pimage)
        self.image = canvas.create_image(0,0,image=self.cimage)


filename = full_filename
root = tk.Tk()
x = MainWindow(root)
mainloop()

y me sale el siguiente error:

TclError: image "pyimage36" doesn't exist

He leído algunas cosas sobre los objetos de imagen que limpian la basura, pero no lo entiendo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta