So you think you know Python

10 points by danbmil99 ↗ HN
Quiz: what is the value of foo after this code is run?

foo=[0];bar=[foo];foo[0]=bar

Extra credit:

1) what is bar[0]

2) foo==bar

6 comments

[ 5.6 ms ] story [ 30.2 ms ] thread
Well, don't do that.

It's just a circular data structure, many (or even most) languages give you enough rope to hang yourself with one of those. Nothing particularly surprising or Python-specific about it.

(comment deleted)
foo = [bar[foo]]

bar[0] = foo

false

if wrong please correct accordingly.

What you have is a circular structure. foo and bar are distinct objects, so foo == bar is false. However, they are similar objects: they have exactly the same structure. If we had a function for structural comparison which handles cycles, that function would have to conclude that foo and bar are structurally equal. This is because of symmetry in the cycle: bar[0] is foo and, symmetrically, foo[0] is bar. Both foo and bar are one-element lists whose elements are, respectively, bar and foo.