copy material with python
Material.copy() is what you want. Also you have to duplicate the object's mesh because materials link to the object's data by default.

import bpy

scn = bpy.context.scene
obj = bpy.context.active_object
mat = obj.active_material
mesh = obj.data

dup = bpy.data.objects.new(obj.name, mesh.copy())
dup.active_material = mat.copy()
scn.objects.link(dup)

dup.location.x += 3    # just for clarity