On the next line, the code calls updateTimedirectly; calling recursive call.
root.after(500, updateTime(var))
# ^ ^
Pass the function and argument without calling, this will solve your problem.
root.after(500, updateTime, var)
Alternatively you can use lambda:
root.after(500, lambda: updateTime(var))
BTW, time.strftime, updateTime :
def updateTime(var):
var.set(time.strftime('%H:%M:%S'))
root.after(500, updateTime, var)