Will vertex indices change?
In general vertex indices are not a reliable way to keep track of vertices.

However in some cases you can't avoid using them (MDD/PC2 animations and texmesh feature for example), basically - as long as you only deform the geometry and don't add/remove/subdivide... etc. They can be used - but users of your tools need to be aware of this limitation. If you can avoid relying on vertex indices, its normally best to do so.

This example shows why vertex indices aren't safe as reference:

import bpy

bpy.ops.object.mode_set(mode='EDIT', toggle=False)

ob = bpy.context.object
verts = ob.data.vertices

print("Before", verts[0].co)
# could also be edge-split, subdivide, knife-project, delete ... etc
bpy.ops.mesh.sort_elements(type='RANDOMIZE', elements={'VERT',})
ob.update_from_editmode()
print("After", verts[0].co)

# Before &lt;Vector (1.0000, 1.0000, -1.0000)&gt;
# After &lt;Vector (1.0000, 1.0000, 1.0000)&gt;


You should look into custom data layers:

http://www.blender.org/documentation/blender_python_api_2_69_release/bmesh.html#customdata-access