How create two new a objects(mesh) from single selection
Ideally you could use bmesh.ops.split() but the option to copy to a new mesh is still unsupported.

Using bmesh you can copy the selected verts and faces and create a new mesh out of them, then use that in a new object.

import bpy
import bmesh

act_obj = bpy.context.active_object

if act_obj.mode == 'EDIT':
    bm = bmesh.from_edit_mesh(act_obj.data)
else:
    bm = bmesh.new()
    bm.from_mesh(act_obj.data)
new_mesh = bmesh.new()

onm = {} # old index to new vert map
for v in [v for v in bm.verts if v.select]:
    nv = new_mesh.verts.new(v.co)
    onm[v.index] = nv

for f in [f for f in bm.faces if f.select]:
    nfverts = [onm[v.index] for v in f.verts]
    new_mesh.faces.new(nfverts)

scene = bpy.context.scene

new_data = bpy.data.meshes.new("mymesh1")
new_mesh.to_mesh(new_data)
obj = bpy.data.objects.new("SplitObj1", new_data)
scene.objects.link(obj)

new_data = bpy.data.meshes.new("mymesh2")
new_mesh.to_mesh(new_data)
obj = bpy.data.objects.new("SplitObj2", new_data)
scene.objects.link(obj)

bm.free()
new_mesh.free()