By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
464,667 Members | 1,347 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 464,667 IT Pros & Developers. It's quick & easy.

Does '!=' equivelent to 'is not'

P: n/a
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?
Jun 27 '08 #1
Share this Question
Share on Google+
23 Replies

P: n/a
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?
No, they are not the same thing. == and != test to see if the *value* of
two variables are the same. Like so:
>>a = 'hello world'
b = 'hello world'
a == b
True

a and b both have the value of 'hello world', so they are equal

is and is not, however, do not test for value equivalence, they test for
object identity. In other words, they test to see if the object the two
variables reference are the same object in memory, like so:
>>a is b
False

a and b are assigned to two different objects that happen to have the
same value, but nevertheless there are two separate 'hello world'
objects in memory, and therefore you cannot say that a *is* b

Now look at this:
>>c = d = 'hello world'
c == d
True
>>c is d
True

In this case, they are again the same value, but now the is test also
shows that they are the same *object* as well, because both c and d
refer to the same 'hello world' object in memory. There is only one this
time.

!= and is not work the same:
>>a != b
False
>>a is not b
True
>>c != d
False
>>c is not d
False
>>>
Hope that helps!
Jun 27 '08 #2

P: n/a
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 `==` operator tests equality. The `is` operator tests identity.

If you don't specifically intend to test for identity, use `==`. If you
don't know what identity tests are for (with the exception of testing
for None-ness), then you don't need it.

--
Erik Max Francis && ma*@alcyone.com && http://www.alcyone.com/max/
San Jose, CA, USA && 37 18 N 121 57 W && AIM, Y!M erikmaxfrancis
Do we ask what profit the little bird hopes for in singing?
-- Johannes Kepler, 1571-1630
Jun 27 '08 #3

P: n/a
On Jun 16, 10:29*pm, pirata <pir...@mars.invalidwrote:
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?
"is not" is the logical negation of the "is" operator, while "!=" is
the logical negation of the "==" operator. The difference is equality
versus identity.
>>a = [1, 2, 3]
b = [1, 2, 3]
a == b
True
>>a is b
False
Jun 27 '08 #4

P: n/a
John Salerno wrote:
== and != test to see if the *value* of
two variables are the same.
Let me just clarify this. It might seem like a picky point, but I think
it's pretty important when learning Python.

I don't really mean the value of the variables themselves, I mean the
values that the variables refer to. The variables themselves aren't
actually the objects, nor do they have values, exactly. Instead, they
*refer* to objects in memory, and it is these objects that we are
testing the values and identities of. For example, using that previous code:

a ---'hello world'

b ---'hello world'

c ---\
---'hello world'
d ---/

a and b were assigned to two separate objects (it doesn't matter that
they happen to be the same value). As you can see above, a and b refer
to different things.

c and d, however, were assigned simultaneously to the same object, and
therefore refer to a single object in memory. This is why "c is d" is
True, but "a is b" is False.
Jun 27 '08 #5

P: n/a
On Tue, Jun 17, 2008 at 11:29 AM, pirata <pi****@mars.invalidwrote:
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
Jun 27 '08 #6

P: n/a
Lie
On Jun 17, 11:07*am, "Leo Jay" <python.leo...@gmail.comwrote:
On Tue, Jun 17, 2008 at 11:29 AM, pirata <pir...@mars.invalidwrote:
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.
Jun 27 '08 #7

P: n/a
En Tue, 17 Jun 2008 02:25:42 -0300, Lie <Li******@gmail.comescribió:
On Jun 17, 11:07*am, "Leo Jay" <python.leo...@gmail.comwrote:
>On Tue, Jun 17, 2008 at 11:29 AM, pirata <pir...@mars.invalidwrote:
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
pyid([])==id([])
True

Even dissimilar objects may have the same id:

pyclass A: pass
....
pyclass B: pass
....
pyA() is B()
False
pyA() == B()
False
pyid(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

Jun 27 '08 #8

P: n/a
"Leo Jay" <py***********@gmail.comwrote:
same objects are equal, but equal don't have to be the same object.
same objects are often equal, but not always:
>>inf = 2e200*2e200
ind = inf/inf
ind==ind
False
>>ind is ind
True

--
Duncan Booth http://kupuguy.blogspot.com
Jun 27 '08 #9

P: n/a
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)

iD8DBQFIV6mFdjdlQoHP510RAnuCAJ0bduRUXrOsAM1YeVkB6a t7QGCMQACdFTD7
qhGWDqFcvX3JokVte+EXu8s=
=OQ51
-----END PGP SIGNATURE-----

Jun 27 '08 #10

P: n/a


pirata wrote:
I'm a bit confusing about whether "is not" equivelent to "!="
>>0 is not 0.0
True
>>0 != 0.0
False

Jun 27 '08 #11

P: n/a
En Tue, 17 Jun 2008 09:09:41 -0300, Derek Martin <co**@pizzashack.org>
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.
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

Jun 27 '08 #12

P: n/a
On Jun 17, 5:33 pm, "Gabriel Genellina" <gagsl-...@yahoo.com.ar>
wrote:
En Tue, 17 Jun 2008 02:25:42 -0300, Lie <Lie.1...@gmail.comescribió:
>
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
pyid([])==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.


Jun 27 '08 #13

P: n/a
>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.

Jun 27 '08 #14

P: n/a
En Tue, 17 Jun 2008 23:04:16 -0300, Asun Friere <af*****@yahoo.co.ukescribió:
On Jun 17, 5:33 pm, "Gabriel Genellina" <gagsl-...@yahoo.com.ar>
wrote:
>En Tue, 17 Jun 2008 02:25:42 -0300, Lie <Lie.1...@gmail.comescribió:
>>
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
pyid([])==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

Jun 27 '08 #15

P: n/a
On Jun 17, 7:09*am, Derek Martin <c...@pizzashack.orgwrote:
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
Jun 27 '08 #16

P: n/a
Gabriel Genellina wrote:
(This thread is getting way above 10000cp...)
What is 10000cp?
--
Ethan

Jun 27 '08 #17

P: n/a
Lie
On Jun 18, 7:26*am, "Gabriel Genellina" <gagsl-...@yahoo.com.ar>
wrote:
En Tue, 17 Jun 2008 09:09:41 -0300, Derek Martin <c...@pizzashack.org*
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")
Jun 27 '08 #18

P: n/a
Lie
On Jun 18, 12:32*pm, Terry Reedy <tjre...@udel.eduwrote:
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.
Jun 27 '08 #19

P: n/a
On Jun 18, 2:22*pm, Lie <Lie.1...@gmail.comwrote:
>
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
Jun 27 '08 #20

P: n/a
Lie
On Jun 19, 2:51*am, Paul McGuire <pt...@austin.rr.comwrote:
On Jun 18, 2:22*pm, Lie <Lie.1...@gmail.comwrote:
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.
Jun 27 '08 #21

P: n/a
En Wed, 18 Jun 2008 14:26:31 -0300, Ethan Furman <dp@admailinc.com>
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

Jun 27 '08 #22

P: n/a
On Jun 18, 9:43*pm, Lie <Lie.1...@gmail.comwrote:
On Jun 19, 2:51*am, Paul McGuire <pt...@austin.rr.comwrote:
On Jun 18, 2:22*pm, Lie <Lie.1...@gmail.comwrote:
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.
Jun 27 '08 #23

P: n/a
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. :D 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
completely bonkers, I admit).

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)

iD8DBQFIWf3udjdlQoHP510RAk5CAJwPLcI4typySID7hgkgrK 7tBTowqQCgvQa/
UY+H3HZzcSDNz0to5xaAeqo=
=LuuV
-----END PGP SIGNATURE-----

Jun 27 '08 #24

This discussion thread is closed

Replies have been disabled for this discussion.