0

# python: append question

a = [] b = [a,a,a] for x in b: n = len(x) # does n = 3 here? x.append(n). # does b = [a,a,a,3] now? print(b[0]) #outputs [0,1,2] How did we get this output?

4 ответов

+ 3

x=a=[] at first iteration,
n=0
x.append(n) results in 0 appended to list [] and x and a both are pointing to the same list
x=a=[0] at second iteration ,//as all the three a's are pointing to the same list ,
n=1
x.append(n) results in 1 appended to [0] resulting in [0,1]
x=a=[0,1] at third iteration
n=2
x.append(n) // results in [0,1,2]
So since all a's are pointing to same list b[0] results in [0,1,2]

+ 1

Solus the item(x) in list b is "a" which is pointing to [] , and x.append(n) results in mutation of original list , so [] is [0] ,not empty list [] ,at every iteration you are appending a number to the original list

0

Abhay
The the number of items (x) in list b doesn't change...
So...why does the value of n increase with each iteration?

0

You have stored a list reference in b list, not its values.. So same Refference will be copied to x in loop so all time you dealing with references, in one instance change will cause all refference point to a list cause change in a list...
So in loop,, in first iteration a list is empty, len(x) means len(a) is 0, this you will appending to x so x refer to a, list appended 0...
Now 2nd iteration, len(x) return 1, because 0 added previously... Next it return 2, because 0, 1 added before now a list added [0,1,2]
In loop, it changing like
a =[]
b [a, a, a]
After 1st iteration a = [0], b = [a,a,a] means =>[ [0], [0], [0]]
After 2nd iteration a = [0, 1], b = [ [0,1], [0,1], [0,1]]
After 3rd iteration a = [0, 1,2], b = [ [0,1,2], [0,1,2], [0,1,2]]
So
b[0] point list a so it will return [0,1,2]