In Tkinter you should use after instead of sleep to schedule functions for later execution (in milliseconds). In your case, you could try something like this.
def flash():
for i in range(1,len(says)):
label5.after(i*1000, lambda i=i: label5.config(bg=says[i]))
import tkinter as tk
says = ["white", "red", "green", "blue"]
root = tk.Tk()
label5 = tk.Button(root, text="Flashing label", command=flash)
label5.pack()
root.mainloop()
Note that this does not delay the execution of the loop itself but just schedules the label to be updated at different times in the future. If there is more code inside the loop that should co-occur with the color changes, you'd have to put that into the callback function, as well, which, of course, can also be a regular def function instead of lambda. (About the lambda i=i: see here)