+ 3
Variables in Python ... again
After https://www.sololearn.com/Discuss/1036989/can-anyone-explain-this-as-simply-as-possible I face a new issue : https://code.sololearn.com/cw2iaVf6fp0M/#py How to explain this one ? Thanks for your help
5 Answers
+ 2
Your answer is line 5. In the second round, a and b are names for the same list. In the first round, 5 breaks that link by assigning a different list to b.
+ 2
Thank you for that very clear answer !
+ 2
Three bright lights on the spot. I can see clearly now. Thank you all for sharing knowledge !
+ 1
# round 1
listA = [0]
listB = listA # listB assigned to listA
listB = listB + [1] # listB points to listB, then add element valued at 1
listB.append(2) # listB is appended element valued 2
print(listB)
print(listA)
# round 2
listA = [0]
listB = listA # listB once again pointing to listA.
listB.append(2) # listB still pointing at listA during append so listA is appended 2
listB = listB + [1] # listB now pointing to listB (not listA) when we append 1
print(listB)
print(listA)
Read my comments carefully. Basically when listB = listB it is now a copy. It does _not_ point to listA any more. So in Round 1 you appended 2 to the copy and in Round 2 you appended 2 to listA (it was still pointing to).
Hope this makes sense.
+ 1
Here I would like to refer listA as a And listB as b for easier typing
a=[0] means a points to 0
b=a means b also points to 0
Pictorially it looks like this:
a=>[0]<=b
note::: => represent a pointing to
After assignment both variables a & b point to the same element 0
append is a list method.It alters the original list.
b.append(2) means 2 is added to the end of [0].Hence in picture
a=>[0,2]<=b
b=b+[1] means you are creating a copy of the original list & adding 1 to it
Picture this as:
a=>[0,2]
b=>[0,2,1]
try to print both lists listA & listB in your round2 to understand this program
By the way, I appreciate you for such a wonderful question...Happy coding