*groan*  I did the equivalent of:

a = "blah de BLAH"
b = "%s" % a
a is b => False
a == b => True

It makes a deepcopy or a double reference for all I know.  Even two
equal immutable strings fail the "is" test, so I stand by my statement
that "is" is bad form unless you are working with an object that is
mutable.  I hope it's not making a double reference, that would be bad
design.

I apologize for glossing over your explicit statement that str are
immutable. Indeed.  I could have reduced my emails by [4,3].

On Aug 2, 1:22 pm, mda_ <donmorri...@gmail.com> wrote:
> Another Caveat: str doesn't implement .__copy__ or .__deepcopy__ so
> I'm being silly....but the main point being "is" is object comparison
> not equality.  Ok, email on exponential backoff!! ;-)
>
> On Aug 2, 11:06 am, mda_ <donmorri...@gmail.com> wrote:
>
>
>
> > Caveat: Hopefully my chaining of operators there didn't mislead, that
> > was unintended.  I think most of what I said still holds, if not all.
>
> > -Don
>
> > On Aug 2, 9:14 am, mda_ <donmorri...@gmail.com> wrote:
>
> > > SageDevs,
>
> > > In the interest of "gotchas", please consider the following:
>
> > > The built-in str, and the module string are different, though both
> > > return type str according to type().
>
> > > Example:
>
> > > d...@dv9000-laptop:~$ python2.6
> > > Python 2.6.4 (r264:75706, Dec  7 2009, 18:43:55)
> > > [GCC 4.4.1] on linux2
> > > Type "help", "copyright", "credits" or "license" for more information.>>> 
> > > from copy import copy,deepcopy
> > > >>> import string
> > > >>> a = '12 3 four five six'
> > > >>> a is copy(a) is deepcopy(a)
> > > True
> > > >>> a == copy(a) == deepcopy(a)
> > > True
> > > >>> b = string.lower(a)
> > > >>> a
>
> > > '12 3 four five six'
>
> > > >>> a is b
> > > False
> > > >>> a == b
> > > True
> > > >>> type(a)
> > > <type 'str'>
> > > >>> type(b)
> > > <type 'str'>
> > > >>> c = copy(a)
> > > >>> c is a
> > > True
> > > >>> d = deepcopy(a)
> > > >>> d is a
> > > True
> > > >>> hash(a) == hash(b)
> > > True
> > > >>> id(a) == id(b)
> > > False
> > > >>> id(a) == id(c) == id(d)
> > > True
> > > >>> id(a) is id(c) is id(d)
> > > False
> > > >>> hash(a) == hash(b) == hash(c) == hash(d)
> > > True
> > > >>> hash(a) is hash(b) is hash(c) is hash(d)
> > > False
> > > >>> type(a) == type(b) == type(c) == type(d)
> > > True
> > > >>> type(a) is type(b) is type(c) is type(d)
> > > True
>
> > > So, I think the take home message is that the keyword "is" is fragile
> > > in some cases.  Also, the return value of type() is misleading.
>
> > >http://docs.python.org/release/2.6.5/reference/lexical_analysis.html#...
>
> > > Cheers,
> > > Don

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to