- 1

Can someone explain to me how this works? (Simple challenge question)

so I was doing a challenge and one of the questions were a = [1,2] b = a a.append (3) print(len (b)) where the answer was 3. So, how come the number appends to b when it was called after b was given the same values of a? edit: fixed the question

22nd Jul 2017, 10:00 AM
ChanYong Kim
7 Answers
+ 1
If you want a and b to be equal, but not change them both at the same time, you would need to do something like: a = [1, 2] b = [] for i in a: b.append(i) a.append(3) print(len(b)) //output 2 or more simply: a = [1, 2] b = [1, 2] a.append(3) print(len(b)) //output 2 You need to tell the computer you want to make two separate lists, or it will assume you mean one list that has two names, a and b.
22nd Jul 2017, 10:33 AM
Ethan Bradley
Ethan Bradley - avatar
+ 1
That's really interesting. Thanks for pointing that out.
22nd Jul 2017, 10:36 AM
Ethan Bradley
Ethan Bradley - avatar
0
That should print 3 if you give it print(len(a)) or print(len(b)) or print(a[2]) or print(b[2]), but print(b) should give [1, 2, 3], not 3. The question was stated wrong. edit: to fix the mistake that OP made in my comment by fixing the post.
22nd Jul 2017, 10:02 AM
Ethan Bradley
Ethan Bradley - avatar
0
Ethan the question wasn't wrong because the final line says print(len(b)) so, as you said it should give 3. That's because the 2 variables(a and b) are linked so when you change the value of one of them the other will follow the previous rule given (a=b) and update itself
22nd Jul 2017, 10:19 AM
Hymn
Hymn - avatar
0
no ethan was right, I originally left put the len () by accident, so I edited it, hence the 'edit' comment. So, when you equate one variable to another, whatever happens to the original happens to the 'copy'?
22nd Jul 2017, 10:23 AM
ChanYong Kim
0
There is no copy. declaring a makes a list and a pointer that means a points to that list. b = a then says that b also points to the same thing, so when you change a, you change the list that both a and b are pointing to, and when you call len(b) it finds the length of the changed list.
22nd Jul 2017, 10:26 AM
Ethan Bradley
Ethan Bradley - avatar
0
Sorry didn't see the edited text. But, wait a sec. I'm seeing now that works only with lists or maybe specific comands. If you try: a=5 b=a a+=1 print(b) It returns 5
22nd Jul 2017, 10:34 AM
Hymn
Hymn - avatar