+ 6

doubling in quiz - values vs references

Attempting to understand one tricky quiz from challenges library. a = [[0]*2]*2 a[0][0]=5 print(a) The output is [[5,0][5,0]] Right? For me it looked like mistake (as usually indeed). When run test in playground I realized how it works and it was a kind of little discovery. first doubling [0]*2 - extends list by doubling items of the list. # second doubling [[0]*2]*2 - creates list of lists. The difference between first and second doubling is doubling values vs doubling references. Looks simple for somebody but for me it is quite tricky likn of code! Isn't it?

2nd Sep 2017, 7:13 PM
Alexander Lebedev
Alexander Lebedev - avatar
4 ответов
+ 2
More over I found and rechecked another tricky quiz. It took time to understand hwo it works. With some modifications the quiz looks like following: def build_list(element, to=[]): to.append(element) #print(to) #print(id(to)) return to list1=build_list(1) print(list1) list2=build_list(2) # Going to see list2=[2] but actually list2=[1,2] because we invoke function "build_list" without passing any reference # to any list. So list "to" is used by default. And by default it references to the same memory block every time # when "build_list" is invoked without second parameter. print(list2) # But if pass both parameters explicitly the returned result will be more predictible. list3=[] list3=build_list(3,list3) print(list3) list3=build_list(4,list3) print(list3)
27th Aug 2017, 9:28 PM
Alexander Lebedev
Alexander Lebedev - avatar
+ 1
Wow! You cleared it up for me!!
25th Aug 2017, 12:53 PM
Joni Jimenez
Joni Jimenez - avatar
+ 1
Great! It actually means I cleared it up at least for two persons - you and me :)
25th Aug 2017, 9:58 PM
Alexander Lebedev
Alexander Lebedev - avatar
+ 1
Congrats and thank you!
2nd Sep 2017, 7:20 PM
Dapper Mink
Dapper Mink - avatar