Aha!

My analysis was not thorough enough!

Thank you!

Michael


On Sun, Aug 12, 2012 at 11:56 PM, C Anthony Risinger <[email protected]>wrote:

> On Wed, Aug 8, 2012 at 3:59 PM, MichaelMoore
> <[email protected]> wrote:
> >
> >>>>> l = [[]]*3
> >>>>> k = [[] for i in range(3)]
> >>>>> l==k
> > True
> >>>>>
> >
> > The tree produced when using the list comprehension is normal, while the
> > tree produced with the multiplication nests deeper and deeper without
> ever
> > returning to the second level.  That code is called inside a user class
> > modeled after the treeitem demonstration class TreeDemo(SimplePanel).  If
> > someone will tell me where, I will send the code.  Tis a bit long for
> here,
> > but it is a real-world app.on which I am currently working.
>
> im not 100% sure what your question is or if you are requesting
> something, but these two methods are not the same. this is more of a
> general python issue: you are confusing/mixing `comparable` and
> identical:
>
> `==` compare (is A holding the SAME "VALUE" as B?)
> `is` identity (is A the EXACT SAME OBJECT as B?)
>
> ... other langs may use `===` or something for the identity operator
> but the result is the same:
>
> >>> l = [[]]*3
> >>> k = [[] for i in range(3)]
> >>> l==k
> True
> >>> map(id, l)
> [140651978035928, 140651978035928, 140651978035928]
> >>> map(id, k)
> [140651978036360, 140651978035568, 140651978036216]
> >>> l[0] is l[1] is l[2]
> True
> >>> k[0] is k[1] is k[2]
> False
>
> ... `k` creates 4 lists ... one containing the other 3:
>
> list([list(), list(), list()])
>
> ... `l` creates 2 lists ... one containing 3 REFERENCES to the other:
>
> ref = list()
> list([ref, ref, ref])
>
> ... which, depending on context, can be a BIG difference (walking a
> tree is one such context ;-)
>
> --
>
> C Anthony
>
> --
>
>
>
>

-- 



Reply via email to