python: Split mesh by uv islands
Using bpy.ops.uv.seams_from_islands(...)



Here is a script to run in edit mode.

import bpy
import bmesh
context = bpy.context
obj = context.edit_object
me = obj.data
bm = bmesh.from_edit_mesh(me)
# old seams
old_seams = [e for e in bm.edges if e.seam]
# unmark
for e in old_seams:
    e.seam = False
# mark seams from uv islands
bpy.ops.uv.seams_from_islands()
seams = [e for e in bm.edges if e.seam]
# split on seams
bmesh.ops.split_edges(bm, edges=seams)
# re instate old seams.. could clear new seams.
for e in old_seams:
    e.seam = True
bmesh.update_edit_mesh(me)


You may want to remove boundary seams

boundary_seams = [e for e in bm.edges if e.seam and e.is_boundary]