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.
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
Post a Comment