Code takes more time to run the more complex the scene gets I have a script that parses a text file and creates the objects specified. The object creation should theoretically be O(1).

This method is the only thing other than an if quick unrelated if statement to set a Boolean and there's an increment of an int after that I included in my timing bounds.

def createAtom(aType,location):
    bpy.ops.mesh.primitive_ico_sphere_add(subdivisions=4,size=atomProps[aType]['size']/100.0,location=location)
    ob = bpy.context.object
    for polygon in ob.data.polygons:
        polygon.use_smooth = True
    if len(aType): ob.active_material = atomProps[aType]['material']
    ob.parent = empty
    ob.name = str(currAtom)


as you can see, it doesn't iterate over anything except for setting smooth shading, and with that loop commented out it still increases pretty drastically over time.
The anomaly with the bond times is that sometimes there are double bonds, so it takes twice as long.
This is a common issue related to unique name lookup.

When an object is added to scene, blender ensure the name is unique.
So the more objects you add, the more time each one require for the name lookup.