Blender Python Data (equality works between instances, identity not) In the first example, a is b returns True as it should. In the second, it is False. (assume Blender is just opened and the default cube is present and selected).  I thought I was starting to understand until I got False.  This is copied form the Python console.

&gt;&gt;&gt; a = [1, 2, 3]
&gt;&gt;&gt; b = a
&gt;&gt;&gt; a == b
True

&gt;&gt;&gt; a is b
True

&gt;&gt;&gt; a = bpy.context.active_object.data
&gt;&gt;&gt; b = bpy.data.meshes[bpy.context.active_object.name]
&gt;&gt;&gt; a
bpy.data.meshes['Cube']

&gt;&gt;&gt; b
bpy.data.meshes['Cube']

&gt;&gt;&gt; type(a)
&lt;class 'bpy_types.Mesh'&gt;

&gt;&gt;&gt; type(b)
&lt;class 'bpy_types.Mesh'&gt;

&gt;&gt;&gt; a == b
True

&gt;&gt;&gt; a is b
False   # WHY?


Another example based on @ideasman42 explanation...

&gt;&gt;&gt; a = bpy.context.object
&gt;&gt;&gt; b = bpy.context.object
&gt;&gt;&gt; a is b
False
Each time you access object.data it will return a new instance,
however this is a very small data type to access the real mesh data stored in Blender.

Equality works as expected (and they have the same __hash__), so you can put them into dict/set types. You just can't rely on identity. (As with any 2 strings with the same content).