Does that set the "Name" and "InternalName" fields in the DB to the same value? My skills with python aren't that great so I'm unsure. If it does do this, great, if not, I'd suggest changing it so Name and InternalName are being set to the same value.
When testing the shelf sync on iOS we found if Name was set and InternalName was left blank, then the Touch would pick up the shelf, but on the next sync it seemed to create another shelf of the same name. We tracked it down to us not setting the InternalName as well as the Name. We looked at what Touch did and saw it set both, and once we did the same, everything worked as it should.
One other thing to note is that iOS now supports shelf sync, previously it was Touch only, and thus if you were to create shelves, manually, or via this script, then if you sync your Touch, the shelves will sync, and if you happen to have the iOS app, and it syncs then it will pull down these shelves. If the books are in your Kobo Library, ie; not side-loaded, you will see them populate in the shelves. If they are side-loaded, well, you may end up with an empty shelf.
If you delete that shelf on iOS then when you next sync the Touch the shelf will be removed as it's removed from the server.