Assign a separate material to each object in array

I have the following code to assign a different material ( a copy of base object material, but i want a separate material for each object).

baseMat = lightBulb.active_material
print("Base Material name ",baseMat.name)

for i in range(1, pts + o):
    s = lightBulb.copy()
    newMatName = baseMat.name 
    newMat = bpy.data.materials.new(name = newMatName)

    # Assign it to object
    if s.data.materials:
        # assign to 1st material slot
        s.data.materials[0] = newMat
    else:
        # no slots
        s.data.materials.append(newMat)   
        
    print("Object ",s.name," material ",s.data.materials[0])
    sc = s.constraints[0]
    sc.offset_factor = i / pts
    scene.objects.link(s)
    spheres.append(s)

The problem is all the objects get assign the last material created instread of the individual copies. Here is the printout. At the end, each bulb is assigned material “BulbMaterial.037”

Base Material name  BulbMaterial
Object  Bulb.001  material  <bpy_struct, Material("BulbMaterial.001")>
Object  Bulb.002  material  <bpy_struct, Material("BulbMaterial.002")>
Object  Bulb.003  material  <bpy_struct, Material("BulbMaterial.003")>
Object  Bulb.004  material  <bpy_struct, Material("BulbMaterial.004")>
Object  Bulb.005  material  <bpy_struct, Material("BulbMaterial.005")>
Object  Bulb.006  material  <bpy_struct, Material("BulbMaterial.006")>
Object  Bulb.007  material  <bpy_struct, Material("BulbMaterial.007")>
Object  Bulb.008  material  <bpy_struct, Material("BulbMaterial.008")>
Object  Bulb.009  material  <bpy_struct, Material("BulbMaterial.009")>
Object  Bulb.010  material  <bpy_struct, Material("BulbMaterial.010")>
Object  Bulb.011  material  <bpy_struct, Material("BulbMaterial.011")>
Object  Bulb.012  material  <bpy_struct, Material("BulbMaterial.012")>
Object  Bulb.013  material  <bpy_struct, Material("BulbMaterial.013")>
Object  Bulb.014  material  <bpy_struct, Material("BulbMaterial.014")>
Object  Bulb.015  material  <bpy_struct, Material("BulbMaterial.015")>
Object  Bulb.016  material  <bpy_struct, Material("BulbMaterial.016")>
Object  Bulb.017  material  <bpy_struct, Material("BulbMaterial.017")>
Object  Bulb.018  material  <bpy_struct, Material("BulbMaterial.018")>
Object  Bulb.019  material  <bpy_struct, Material("BulbMaterial.019")>
Object  Bulb.020  material  <bpy_struct, Material("BulbMaterial.020")>
Object  Bulb.021  material  <bpy_struct, Material("BulbMaterial.021")>
Object  Bulb.022  material  <bpy_struct, Material("BulbMaterial.022")>
Object  Bulb.023  material  <bpy_struct, Material("BulbMaterial.023")>
Object  Bulb.024  material  <bpy_struct, Material("BulbMaterial.024")>
Object  Bulb.025  material  <bpy_struct, Material("BulbMaterial.025")>
Object  Bulb.026  material  <bpy_struct, Material("BulbMaterial.026")>
Object  Bulb.027  material  <bpy_struct, Material("BulbMaterial.027")>
Object  Bulb.028  material  <bpy_struct, Material("BulbMaterial.028")>
Object  Bulb.029  material  <bpy_struct, Material("BulbMaterial.029")>
Object  Bulb.030  material  <bpy_struct, Material("BulbMaterial.030")>
Object  Bulb.031  material  <bpy_struct, Material("BulbMaterial.031")>
Object  Bulb.032  material  <bpy_struct, Material("BulbMaterial.032")>
Object  Bulb.033  material  <bpy_struct, Material("BulbMaterial.033")>
Object  Bulb.034  material  <bpy_struct, Material("BulbMaterial.034")>
Object  Bulb.035  material  <bpy_struct, Material("BulbMaterial.035")>
Object  Bulb.036  material  <bpy_struct, Material("BulbMaterial.036")>
Object  Bulb.037  material  <bpy_struct, Material("BulbMaterial.037")>