While in edit mode, the editor handles a mirror of the mesh, which is then saved as the object's data once you leave edit mode. Your script meanwhile alters the underlying original mesh, which isn't being displayed. Leaving editmode stores the edit mesh, so the scripted alterations don't show up at all.
One way to work around this is to do the scripted changes outside of edit mode:
import bpy
bpy.ops.mesh.primitive_cube_add()
bpy.ops.object.mode_set(mode="EDIT")
bpy.ops.mesh.select_all(action="DESELECT")
bpy.context.tool_settings.mesh_select_mode = (True , False , False)
bpy.ops.object.mode_set(mode="OBJECT")
bpy.context.object.data.vertices[0].select = True
bpy.context.object.data.vertices[0].co = (-3,-2,-3)
bpy.ops.object.mode_set(mode="EDIT")
Another is to request the editing BMesh:
import bpy, bmesh
bpy.ops.mesh.primitive_cube_add()
bpy.ops.object.mode_set(mode="EDIT")
bpy.ops.mesh.select_all(action="DESELECT")
bpy.context.tool_settings.mesh_select_mode = (True , False , False)
mesh=bmesh.from_edit_mesh(bpy.context.object.data)
mesh.verts[0].select = True
mesh.verts[0].co = (-3,-2,-3)
This is a documented gotcha of Blender's scripting interface.