Something really weird happend when dropping all tables in web2py
===

controllers/admin.py:

    def olddo_remove():
        response.view = 'admin/do_remove.html'
        l = []
        k = []
        for table_name in db.tables:
            l.append(table_name)
            db[table_name].drop()
            #db[table_name].truncate()
        return locals()
    
    def do_remove():
        l = []
        k = []
        for table_name in db.tables:
            l.append(table_name)
        for table_name in l:
            k.append(table_name)
            db[table_name].drop()
        return locals()

views/admin/do_remove.html:

    {{=l}}<br />{{=k}}

When I visit admin/olddo_remove, I get

    ['auth_user', 'auth_membership', 'auth_event', 'client', 'data']
    [] 

When I visit admin/do_remove, I get

    ['auth_user', 'auth_group', 'auth_membership', 'auth_permission', 'auth_event', 'auth_cas', 'client', 'product', 'data']
    ['auth_user', 'auth_group', 'auth_membership', 'auth_permission', 'auth_event', 'auth_cas', 'client', 'product', 'data'] 

If I change the `drop` to `truncate` in olddo_remove, the output will be

    ['auth_user', 'auth_group', 'auth_membership', 'auth_permission', 'auth_event', 'auth_cas', 'client', 'product', 'data']
    [] 

Why? What's wrong?