What is going on with selection? New scene.
Enter edit mode.
Use the bisect tool to slice the Cube.
Only the new vertices appear to be selected.
Enter object mode.
In the console:
# check what vertices are selected in the Cube mesh
verts = bpy.data.meshes['Cube'].vertices
for v in verts:
    if v.select:
        print(v)

&lt;bpy_struct, MeshVertex at 0x0000021439A0ABD8&gt;
&lt;bpy_struct, MeshVertex at 0x0000021439A0ABEC&gt;
&lt;bpy_struct, MeshVertex at 0x0000021439A0AC00&gt;
&lt;bpy_struct, MeshVertex at 0x0000021439A0AC14&gt;

# de-select all verts in the Cube mesh
for v in verts:
    v.select = False

# check to make sure they're de-selected     
for v in verts:
    if v.select:
         print(v)
# no vertices

# switch to edit mode         
bpy.ops.object.editmode_toggle()
{'FINISHED'}

# something is strange. vertices appear to be selected now.

# switch back to object mode
bpy.ops.object.editmode_toggle()
{'FINISHED'}

# look through each vert to see if it is selected
for v in verts:
    if v.select:
        print(v)
         
&lt;bpy_struct, MeshVertex at 0x0000021439A098D8&gt;
&lt;bpy_struct, MeshVertex at 0x0000021439A098EC&gt;
&lt;bpy_struct, MeshVertex at 0x0000021439A09900&gt;
&lt;bpy_struct, MeshVertex at 0x0000021439A09914&gt;

It seems like switching to edit mode selected vertices.
Except these are different objects than they originally were,
despite being the same vertices.
Is this a bug?  If not...what is going on?  Why does selection get reported as one thing, and then revert to a prior state when switching to edit mode?  How can the vertices displayed on screen be different objects each time they're reported?  How can I prevent this?
4 edges are also selected.
Have noticed this too.
Remember that after the bisect as well as the four selected verts, there are 4 selected edges.  Even though you deselect the verts, the edges aren't picking this up, so when re-enter edit mode the verts of the selected edges are selected.
To make sure nothing is selected deselect the lot.
Bmesh has a select flush for this, and now a select_set to validate selection.
How does Blender know which faces and edges to automatically select when doing a multi-vert selection?
PS. A copy of sorts of the mesh is created when entering edit mode, and written back when exiting.. or calling
ob.update_from_editmode()

hence the different memory ref.
EDIT re edit and unaccept.

An answer below says that this is happening because there are edges
selected. And it doesn't happen if I use this same approach to select
edges. However,

which at the time of posting can assume is this answer... test on plane (no geom selected, in OBJECT mode)
&gt;&gt;&gt; ob = C.object
&gt;&gt;&gt; me = ob.data
&gt;&gt;&gt; C.mode
'OBJECT'


if I start from having no components selected
 

&gt;&gt;&gt; [v.select for v in me.vertices]
[False, False, False, False]

&gt;&gt;&gt; [e.select for e in me.edges]
[False, False, False, False]


then select the same edges
 
Edge zero by way of example.

&gt;&gt;&gt; me.edges[0].select = True
&gt;&gt;&gt; [e.select for e in me.edges]
[True, False, False, False]

&gt;&gt;&gt; [v.select for v in me.vertices]
[False, False, False, False]


then enter and exit edit mode,
 

&gt;&gt;&gt; bpy.ops.object.editmode_toggle()
{'FINISHED'}

&gt;&gt;&gt; C.mode
'EDIT_MESH'

&gt;&gt;&gt; bpy.ops.object.editmode_toggle()
{'FINISHED'}

&gt;&gt;&gt; C.mode
'OBJECT'


the vertices remain unselected.

&gt;&gt;&gt; [e.select for e in me.edges]
[True, False, False, False]

&gt;&gt;&gt; [v.select for v in me.vertices]
[True, False, True, False]


So it's not just about having the edges selected.

Sure appears to be the case to me.