# Re: Does '!=' equivelent to 'is not'

Discussion in 'Python' started by Leo Jay, Jun 17, 2008.

1. ### Leo JayGuest

On Tue, Jun 17, 2008 at 11:29 AM, pirata <> wrote:
> I'm a bit confusing about whether "is not" equivelent to "!="
>
> if a != b:
> ...
>
> if a is not b:
> ...
>
>
> What's the difference between "is not" and "!=" or they are the same thing?

The 'is' is used to test do they point to the exactly same object.
The '==' is used to test are their values equal.

same objects are equal, but equal don't have to be the same object.

and be very careful to the dirty corner of python:
>>> a = 100000
>>> b = 100000
>>> a is b

False
>>> a == b

True
>>> a = 5
>>> b = 5
>>> a is b

True
>>> a == b

True
>>>

which is caused by small object cache mechanism.

--
Best Regards,
Leo Jay

Leo Jay, Jun 17, 2008

2. ### LieGuest

On Jun 17, 11:07 am, "Leo Jay" <> wrote:
> On Tue, Jun 17, 2008 at 11:29 AM, pirata <> wrote:
> > I'm a bit confusing about whether "is not" equivelent to "!="

>
> > if a != b:
> >  ...

>
> > if a is not b:
> >  ...

>
> > What's the difference between "is not" and "!=" or they are the same thing?

>
> The 'is' is used to test do they point to the exactly same object.
> The '==' is used to test are their values equal.
>
> same objects are equal, but equal don't have to be the same object.
>
> and be very careful to the dirty corner of python:

No you don't have to be careful, you should never rely on it in the
first place.

Basically 'a is b' and 'not(a is b)' is similar to 'id(a) == id(b)'
and 'not(id(a) == id(b))'

You use 'is' when you want to test whether two variable/names are
actually the same thing (whether they actually refers to the same spot
on memory). The '==' equality comparison just test whether two
objects' values can be considered equal.

Lie, Jun 17, 2008

3. ### Gabriel GenellinaGuest

En Tue, 17 Jun 2008 02:25:42 -0300, Lie <> escribió:
> On Jun 17, 11:07 am, "Leo Jay" <> wrote:
>> On Tue, Jun 17, 2008 at 11:29 AM, pirata <> wrote:

>> > What's the difference between "is not" and "!=" or they are the same thing?

>>
>> The 'is' is used to test do they point to the exactly same object.
>> The '==' is used to test are their values equal.
>>
>> and be very careful to the dirty corner of python:

[example with "5 is 5" but "100000 is not 100000"]

> No you don't have to be careful, you should never rely on it in the
> first place.
>
> Basically 'a is b' and 'not(a is b)' is similar to 'id(a) == id(b)'
> and 'not(id(a) == id(b))'

No.

> You use 'is' when you want to test whether two variable/names are
> actually the same thing (whether they actually refers to the same spot
> on memory). The '==' equality comparison just test whether two
> objects' values can be considered equal.

Yes, *that* is true. The above statement is not. A counterexample:

py> [] is []
False
py> id([])==id([])
True

Even dissimilar objects may have the same id:

py> class A: pass
....
py> class B: pass
....
py> A() is B()
False
py> A() == B()
False
py> id(A())==id(B())
True

Comparing id(a) with id(b) is only meaningful when a and b are both alive at the same time. If their lifetimes don't overlap, id(a) and id(b) are not related in any way. So I think that trying to explain object identity in terms of the id function is a mistake.

--
Gabriel Genellina

Gabriel Genellina, Jun 17, 2008
4. ### Derek MartinGuest

On Tue, Jun 17, 2008 at 04:33:03AM -0300, Gabriel Genellina wrote:
> > Basically 'a is b' and 'not(a is b)' is similar to 'id(a) == id(b)'
> > and 'not(id(a) == id(b))'

>
> No.

Sure it is... he said "similar"... not identical. They are not the
same, but they are similar.

Saying a flat "no" alone, without qualifying your statement is
generally interpreted as rude in English... It's kind of like how you
talk to children when they're too young to understand the explanation.
Yucky.

--
Derek D. Martin
http://www.pizzashack.org/
GPG Key ID: 0x81CFE75D

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQFIV6mFdjdlQoHP510RAnuCAJ0bduRUXrOsAM1YeVkB6at7QGCMQACdFTD7
qhGWDqFcvX3JokVte+EXu8s=
=OQ51
-----END PGP SIGNATURE-----

Derek Martin, Jun 17, 2008
5. ### Gabriel GenellinaGuest

En Tue, 17 Jun 2008 09:09:41 -0300, Derek Martin <>
escribió:

> On Tue, Jun 17, 2008 at 04:33:03AM -0300, Gabriel Genellina wrote:
>> > Basically 'a is b' and 'not(a is b)' is similar to 'id(a) == id(b)'
>> > and 'not(id(a) == id(b))'

>>
>> No.

>
> Sure it is... he said "similar"... not identical. They are not the
> same, but they are similar.

'equality' and 'identity' are similar too, so the whole answer would make
no sense in that case. You can't explain identity based on things that
aren't identical. A fine grained question for a fine grained difference

> Saying a flat "no" alone, without qualifying your statement is
> generally interpreted as rude in English... It's kind of like how you
> talk to children when they're too young to understand the explanation.
> Yucky.

I didn't meant to be rude at all - and I apologize to Mr. Lie. The
explanation for such strong "No" was in the paragraph below it (the idea
was to say: "No to this, yes to that")

--
Gabriel Genellina

Gabriel Genellina, Jun 18, 2008
6. ### Asun FriereGuest

On Jun 17, 5:33 pm, "Gabriel Genellina" <>
wrote:
> En Tue, 17 Jun 2008 02:25:42 -0300, Lie <> escribió:

>
> > Basically 'a is b' and 'not(a is b)' is similar to 'id(a) == id(b)'
> > and 'not(id(a) == id(b))'

>
> No.

...
> ... The above statement is not. A counterexample:
>
> py> [] is []
> False
> py> id([])==id([])
> True
>

But that's not what he said, he used 'a' and 'b' which are names, not
anonymous objects.
Fairer would be,
a = [];b = []
id(a) == id(b)

Morevover, Lie wrote "id(a)==id(b)". Since there is no need for the
anonymous object to persist following id testing, you cannot guarantee
that you are comparing an id of two objects (as referred to by 'a' and
'b'). Haven't you, in effect, tested id(a) == id(a)? While this
might be an interesting effect, I doubt that it clarifies the
difference between equivalence and identity testing, in the way Lie's
statement in fact does.

Also in considering what equivalence means in python reference ought
to be made to the __eq__ method. The original querant may care to
look it up.

Asun Friere, Jun 18, 2008
7. ### Terry ReedyGuest

>> Saying a flat "no" alone, without qualifying your statement is
>> generally interpreted as rude in English... It's kind of like how you
>> talk to children when they're too young to understand the explanation.
>> Yucky.

>
> I didn't meant to be rude at all - and I apologize to Mr. Lie. The
> explanation for such strong "No" was in the paragraph below it (the idea
> was to say: "No to this, yes to that")

As a very much native English speaker I disagree that 'No' is
necessarily rude. I wish I could more often get such a clean answer to
my questions from my child.

Terry Reedy, Jun 18, 2008
8. ### Gabriel GenellinaGuest

En Tue, 17 Jun 2008 23:04:16 -0300, Asun Friere <> escribió:

> On Jun 17, 5:33 pm, "Gabriel Genellina" <>
> wrote:
>> En Tue, 17 Jun 2008 02:25:42 -0300, Lie <> escribió:

>
>>
>> > Basically 'a is b' and 'not(a is b)' is similar to 'id(a) == id(b)'
>> > and 'not(id(a) == id(b))'

>>
>> No.

> ...
>> ... The above statement is not. A counterexample:
>>
>> py> [] is []
>> False
>> py> id([])==id([])
>> True
>>

> But that's not what he said, he used 'a' and 'b' which are names, not
> anonymous objects.
> Fairer would be,
> a = [];b = []
> id(a) == id(b)

If you limit yourself to interpret 'a' and 'b' as actual names, yes, the statement is true. But I thought of them as placeholders or metasyntactic names - like in "abs(x) returns the absolute value of x", where x may represent *any* expression, not just a single name. Under this general interpretation the statement is not true anymore.

(This thread is getting way above 10000cp...)

--
Gabriel Genellina

Gabriel Genellina, Jun 18, 2008
9. ### Paul McGuireGuest

Re: Does '!=' equivelent to 'is not' [drifting OT...]

On Jun 17, 7:09 am, Derek Martin <> wrote:
> On Tue, Jun 17, 2008 at 04:33:03AM -0300, Gabriel Genellina wrote:
> > > Basically 'a is b' and 'not(a is b)' is similar to 'id(a) == id(b)'
> > > and 'not(id(a) == id(b))'

>
> > No.

>

<snip>
>
> Saying a flat "no" alone, without qualifying your statement is
> generally interpreted as rude in English...  It's kind of like how you
> talk to children when they're too young to understand the explanation.
> Yucky.
>

Geez, man, this is Usenet. If you want rude or condescending, the
answer would have been "No, you flatulent moron." Or maybe the
alarmist, "No! No! No!"

I see the unqualified "No." often on this list, as a short cut for
"Your technical explanation is flawed or has overlooked a critical
point or corner case," and is usually followed by more details further
down in the post to explain what the misconception or oversight was.

Back in my college days, I would not be surprised for a professor to
respond "No." (or worse) if I offered an erroneous explanation to
another student. The unqualified "No." may be curt, and on a more
sensitive day, one might write "No. (see below)", but as one of the
most informed and careful posters on this list, I'm inclined to give
Gabriel a little slack.

-- Paul

Paul McGuire, Jun 18, 2008
10. ### Ethan FurmanGuest

Re: Does '!=' equivelent to 'is not' [drifting a little more]

Gabriel Genellina wrote:
> (This thread is getting way above 10000cp...)

What is 10000cp?
--
Ethan

Ethan Furman, Jun 18, 2008
11. ### LieGuest

On Jun 18, 7:26 am, "Gabriel Genellina" <>
wrote:
> En Tue, 17 Jun 2008 09:09:41 -0300, Derek Martin <>
> escribió:
>
> > On Tue, Jun 17, 2008 at 04:33:03AM -0300, Gabriel Genellina wrote:
> >> > Basically 'a is b' and 'not(a is b)' is similar to 'id(a) == id(b)'
> >> > and 'not(id(a) == id(b))'

>
> >> No.

>
> > Sure it is... he said "similar"... not identical.  They are not the
> > same, but they are similar.

>
> 'equality' and 'identity' are similar too, so the whole answer would make
> no sense in that case. You can't explain identity based on things that
> aren't identical. A fine grained question for a fine grained difference
> requires a fine grained answer.

In my defense, I admit I have the tendency to forget (purposefully)
fine-grained differences if I thought that the difference was not
significant enough in the context of speaking. The OP asked about !=
and 'is not', so I explained in terms of those being equality and
identity testing respectively. To give a more concise and easy to
understand example, I said that 'is not' is like using testing the
'id()' of the objects. Since (I think) the difference between != and
'is not' is much larger compared to the difference between 'is not'
and 'id() test', I thought I could consider 'is not' and 'id() test'
as "equivalent" in the context of this thread: 'Does != is equivalent
to "is not"'.

Either way, I'm sorry that I failed to put explicit notice that 'is
not' and 'id() testing' isn't exactly the same either.

> > Saying a flat "no" alone, without qualifying your statement is
> > generally interpreted as rude in English...  It's kind of like how you
> > talk to children when they're too young to understand the explanation.
> > Yucky.

>
> I didn't meant to be rude at all - and I apologize to Mr. Lie.

I don't deserve the apology because the mistake is on me and I didn't
feel offended, in fact I'm delighted someone could point out my
mistake.

> The
> explanation for such strong "No" was in the paragraph below it (the idea
> was to say: "No to this, yes to that")

Lie, Jun 18, 2008
12. ### LieGuest

On Jun 18, 12:32 pm, Terry Reedy <> wrote:
> >> Saying a flat "no" alone, without qualifying your statement is
> >> generally interpreted as rude in English...  It's kind of like how you
> >> talk to children when they're too young to understand the explanation.
> >> Yucky.

>
> > I didn't meant to be rude at all - and I apologize to Mr. Lie. The
> > explanation for such strong "No" was in the paragraph below it (the idea
> > was to say: "No to this, yes to that")

>
> As a very much native English speaker I disagree that 'No' is
> necessarily rude.  I wish I could more often get such a clean answer to
> my questions from my child.

I'm not a native English speaker, although I think my parents would
have liked me to be more straightforward when talking, cause I tend to
say things like "possibly", "maybe", "probably", and other ambiguous
expressions to the extent that it has frustrated them now and then.

Lie, Jun 18, 2008
13. ### Paul McGuireGuest

On Jun 18, 2:22 pm, Lie <> wrote:
>
> I'm not a native English speaker, although I think my parents would
> have liked me to be more straightforward when talking, cause I tend to
> say things like "possibly", "maybe", "probably", and other ambiguous
> expressions to the extent that it has frustrated them now and then.

Well, at least you *talk* to your parents! Mostly what I get from my
kids is, "can I borrow 10 dollars?"

-- Paul

Paul McGuire, Jun 18, 2008
14. ### LieGuest

On Jun 19, 2:51 am, Paul McGuire <> wrote:
> On Jun 18, 2:22 pm, Lie <> wrote:
>
>
>
> > I'm not a native English speaker, although I think my parents would
> > have liked me to be more straightforward when talking, cause I tend to
> > say things like "possibly", "maybe", "probably", and other ambiguous
> > expressions to the extent that it has frustrated them now and then.

>
> Well, at least you *talk* to your parents!  Mostly what I get from my
> kids is, "can I borrow 10 dollars?"

lol, I rarely initiate the talk to my parents unless I have to, they
usually starts talking first which I usually responded with the
ambiguous statements. Well, in fact, I rarely initiate a talk with
anybody, it's my nature to keep myself in the shade until I have to be
in the light.

But I never asked for money up straight like that though.

Lie, Jun 18, 2008
15. ### Gabriel GenellinaGuest

Re: Does '!=' equivelent to 'is not' [drifting a little more]

En Wed, 18 Jun 2008 14:26:31 -0300, Ethan Furman <>
escribió:

> Gabriel Genellina wrote:
>> (This thread is getting way above 10000cp...)

>
> What is 10000cp?

cp = centipoise, a unit of dynamic viscosity, measuring the resistence to
flow.
Honey viscosity is a few hundreds, corn syrup a few thousands, and
something above 10000 cp is really viscous...

--
Gabriel Genellina

Gabriel Genellina, Jun 18, 2008
16. ### MRABGuest

On Jun 18, 9:43 pm, Lie <> wrote:
> On Jun 19, 2:51 am, Paul McGuire <> wrote:
>
> > On Jun 18, 2:22 pm, Lie <> wrote:

>
> > > I'm not a native English speaker, although I think my parents would
> > > have liked me to be more straightforward when talking, cause I tend to
> > > say things like "possibly", "maybe", "probably", and other ambiguous
> > > expressions to the extent that it has frustrated them now and then.

>
> > Well, at least you *talk* to your parents!  Mostly what I get from my
> > kids is, "can I borrow 10 dollars?"

>
> lol, I rarely initiate the talk to my parents unless I have to, they
> usually starts talking first which I usually responded with the
> ambiguous statements. Well, in fact, I rarely initiate a talk with
> anybody, it's my nature to keep myself in the shade until I have to be
> in the light.
>

"'Tis better to remain silent and be thought a fool, than open one's
mouth and remove all doubt." - Samuel Johnson.

> But I never asked for money up straight like that though.

MRAB, Jun 19, 2008
17. ### Derek MartinGuest

Yaieee!

On Wed, Jun 18, 2008 at 01:32:28AM -0400, Terry Reedy wrote:
> > >Saying a flat "no" alone, without qualifying your statement is
> > >generally interpreted as rude in English...

> As a very much native English speaker I disagree that 'No' is
> necessarily rude.

I never said it was necessarily anything. Generalities generally have
lots of exceptions. It definitely isn't *necessarily* rude, and I
didn't interpret Gabriel's message as rude. I was merely pointing out
that such statements are often interpreted as rude, whether or not
they were intended that way. FWIW, my post wasn't intended to be a
post at all, but instead a private message to Gabriel. I guess I
zigged when I should have zagged... ;-)

That said, what he did do, was to contradict a statement which was
literally true, in an abrupt manner. Lots of people would interpret
this as rude demeanor. His commentary was spot on, but the way he
went about making it has a tendency to make some (perhaps many)
responees defensive, if not belligerent. But, if I actually thought
Gabriel was intentionally being rude, I wouldn't have bothered to say
anything, and just deleted all his posts. I don't even think an
apology was warranted...

On Wed, Jun 18, 2008 at 07:01:23AM -0700, Paul McGuire wrote:
> Geez, man, this is Usenet. If you want rude or condescending, the
> answer would have been "No, you flatulent moron." Or maybe the
> alarmist, "No! No! No!"

Sure, those statements would generally be considered *blatantly* rude
(but still sometimes may not be, in context). This does not mean that
less blatant statements are not also rude. Geez indeed...

> I see the unqualified "No." often on this list,

I see it lots of places, and maybe as much as 1/3 of the time, I see
it start flame wars. It seemed clear to me that Gabriel had no
intention of being offensive... All I'm saying is that if you want to
avoid offending some people unintentionally and needlessly, it's a
good idea to avoid making curt statements, especially curt negative
statements.

If the intention is to signal that more is to come, a simple
improvement is to add an elipsis, whose purpose is exactly that:
"No..." But even more effective at avoiding the appearance of being
rude are statements like "Not exactly..." "I don't think so..." etc.
They're not even all that much extra typing.

There are lots of times when a simple "no" is exactly what's called
for. "Do you like dark Chocolate?" "No." "Are you watching the
Celtics game?" "No." Or even, "Is the baby's new shirt blue?" "No,
it's green."

Being concise is not the same as being curt. Tone also plays a big
role, but conveying the appropriate tone of a simple "no" is pretty
much impossible in an e-mail. In written communication, it should be
avoided like the plague.

> Back in my college days, I would not be surprised for a professor to
> respond "No."

Sure, lots of professors are arrogant, insensitive jerks. Does that
make it OK? But, depending on the context and the professor's tone,
even the situation you describe isn't necessarily rude. It often
isn't.

The world is full of Jerks with a capital 'J'. Imagine if it weren't?
How nice that would be... But, all I was offering here was a
suggestion regarding how to not appear like a Jerk when one isn't
intending to.

> but as one of the most informed and careful posters on this list,
> I'm inclined to give Gabriel a little slack.

Sure. But not everyone here knows Gabriel. Not everyone here has
seen his informed contributions. Not everyone here has been here more
than a day... More than a few people have posted on this list
complaining about the sort of responses people provide on this list,
and many such complaints are quite reasonable (though sometimes the
person doing the complaining is himself rather unreasonable, if not

I am somewhat incredulous that this required explanation... In the
end what I thought would be a nice little, "hey, avoid this pot hole"
kind of note seems to mostly have generated a lot of silly noise. I
now retire from this discussion, and crawl back into my happy
lurk-spot.

Cheers

--
Derek D. Martin
http://www.pizzashack.org/
GPG Key ID: 0x81CFE75D

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQFIWf3udjdlQoHP510RAk5CAJwPLcI4typySID7hgkgrK7tBTowqQCgvQa/
UY+H3HZzcSDNz0to5xaAeqo=
=LuuV
-----END PGP SIGNATURE-----

Derek Martin, Jun 19, 2008