The is operator does not match the values of the variables, but the instances themselves.
is
What does it really mean?
It compares object identity, that is, whether the variables refer to the same object in memory. It's like the == in Java or C (when comparing pointers).
==