Multiple assignments in python

I need a clear explanation here.
Why does the following code work ?

foo1 = foo1[0] = [0]


Ok, I know assignments are done left to right.

How does python understand foo1 is a list?

Btw I know foo1 ends up as [[...]] its first element being itself.

Because

foo1 = foo1[0] = [0]


is equivalent to

temp = [0]
foo1 = temp
foo1[0] = temp


it first evaluates expression and then assigns from left to right.
Analyzing this line by line you'll get what's going on:
- first a list is created in temp
- then list temp is assigned to foo1 making it a list (answers your actual question)
- 3rd line just makes an assignment of first element to the list itself (thus [[...]] in output)

Update 2: changed related question as per @blhsing comment to a more related discussion: Python Multiple Assignment Statements In One Line

Python variables know their types based on the type of variable assigned to it. It is a dynamically types language. In your code, the interpreter sees foo1 = foo1[0] = [0] and it fins a value at the end, which is [0]. It is a list with one element 0. Now, this gets assigned to the first element of the list foo1 through foo1[0] = [0]. But since foo1 is already declared, it creates an object which has a pointer to itself, and hence foo1 gets self-referenced infinitely, with the innermost list having 0.

The structure of the list foo1 will be the same when the code is foo1 = foo1[0].

The object foo1 has entered an infinite self-referenced loop.

Comments

Popular posts from this blog

Meaning of `{}` for return expression

Get current scroll position of ScrollView in React Native

React Native - Image Cache