conventions/requirements for 'is' vs '==', 'not vs '!=', etc

s0suk3 at gmail.com s0suk3 at gmail.com
Tue May 20 12:49:39 EDT 2008


On May 20, 9:04 am, castironpi <castiro... at gmail.com> wrote:
> On May 20, 5:04 am, Duncan Booth <duncan.bo... at invalid.invalid> wrote:
>
>
>
> > John Salerno <johnj... at NOSPAMgmail.com> wrote:
> > >>>> a = 'this is longer'
> > >>>> b = 'this is longer'
> > >>>> a == b
> > > True
> > >>>> a is b
> > > False
>
> > > In the above example, Python has created only one string called
> > > 'hello' and both x and y reference it. However, 'this is longer' is
> > > two completely different objects.
>
> > That is true when run interactively, but the behaviour changes again if you
> > run it as a script:
>
> > C:\Temp>type t.py
> > a = 'this is longer'
> > b = 'this is longer'
> > print a is b
>
> > C:\Temp>t
> > True
>
> > In short, two equal strings may or may not be identical and any code which
> > makes assumptions based on observed behaviour is broken. If you want to be
> > able to test identity on strings safely then use the 'intern()' builtin to
> > get repeatable behaviour.
>
> > --
> > Duncan Boothhttp://kupuguy.blogspot.com
>
> There is no such thing as real true equals.

That's quite some dark deep philosophy. Fortunately, computers are not
as complicated as real life. I would argue that, programatically,
there *is* such thing as "real true equals". I would also argue that
that view is most certainly not shared by everyone.



More information about the Python-list mailing list