Mesh and NMesh

What is the difference between Mesh and NMesh? Are these two classes independent?

From the python API docs:

This module provides access to Mesh Data objects in Blender. It differs from the NMesh module by allowing direct access to the actual Blender data, so that changes are done immediately without need to update or put the data back into the original mesh. The result is faster operations with less memory usage.

Basically its faster and more of a wrapper around the data instead of a middle man to the data.

NMesh stands for New Mesh but is actually older.
Its maintained but isnt having much new stuff added.

If you need to create/add/delete geometry, NMesh seems better - possibly necessary.

NMesh is easier to use for modifying data (adding removing data in most cases), but Id still recommend trying Mesh over NMesh.

That makes more sense now. Thanks.