A question on modification of a list via a function invocation

Gregory Ewing greg.ewing at canterbury.ac.nz
Fri Sep 8 02:58:28 EDT 2017


Rustom Mody wrote:
> 2. is — machine representation, too fine to be useful

No, it's *not* machine representation. As I pointed out before,
it's part of the abstract semantics of Python.

And it's not "too fine to be useful". On the contrary, being
aware of which objects are the same and which aren't is vital
to writing Python programs that behave in the intended way.

> 3. graph (or topological) equality

> 3 captures pythonistas intuition of same better than 1 or 2

I don't think so, see below.

>>>>a = [1,2]
>>>>b = [a,a]
>>>>c = [[1,2],[1,2]]

>>>>p = [1,2]
>>>>q = [p,p]
>>>>r = [[1,2],[1,2]]

> Now the pythonista understands that b and c may be math-= but have different structure
> Whereas b is graph-equal to q
> And c is graph-equal to r
> 
> However there is no available operation to show/see that distinction

Because usually it's not particularly important to know
whether two separate structures have the same topology.

On the other hand, it *is* important to know things
such as 'b[0] is b[1]' but 'c[0] is not c[1]', because
it makes a difference to what happens if you mutate
any of those.

> The trouble is that graph-isomorphism is NP-complete so the crucial operation
> cannot be reasonably implemented

We're fortunate that it's not actually a crucial
operation, then. :-)

-- 
Greg



More information about the Python-list mailing list