Consider the following two code fragments.
Fragment 1 :
l = range(10)
list(l)
m = reversed(l)
list(m)
l = range(-1)
list(l)
list(m)
Fragment 2 :
l = range(10)
m = reversed(l)
l = range(-1)
list(l)
list(m)
The only difference between them lies in the fact that does not cause Snippet 2 list(l)and list(m)in its first half.
In Bizzarely, the final challenge list(m)in Snippet 1 returns
[]
whereas the final call list(m)in Snippet 2 returns
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
These are different meanings!
This is not the behavior that I expected. Presumably, previous calls list(l)and list(m)in some Snippet 1 trigger memory optimization; can anyone explain to me exactly what is going on, please?
>>> l = range(10)
>>> list(l)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> m = reversed(l)
>>> list(m)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> l = range(-1)
>>> list(l)
[]
>>> list(m)
[]
>>>
>>> l = range(10)
>>> m = reversed(l)
>>> l = range(-1)
>>> list(l)
[]
>>> list(m)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Thank.