Computer Science, asked by RATHIJAAT, 3 months ago

class 12th computer science​

Attachments:

Answers

Answered by negiabhishek236
1

Answer:

Stack Overflow

sign up log in

By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and our Terms of Service.

Questions Jobs Tags Users Badges Ask

Up vote

10

Down vote

Python swapping lists

python list iterable-unpacking python-internals

In python, when I assign a list to another, like:

a = [1,2,3]

b = a

Now b and a point to the same list. Now considering two lists,

a = [1,2,3]

b = [4,5,6]

a,b = b,a

Now how is it that they are swapped like any other data type and does not end up both pointing to the same list?

share improve this question follow

asked

Dec 14 '13 at 11:57

Aswin Murugesh

9,210●1010 gold badges●3333 silver badges●6363 bronze badges edited

Dec 15 '13 at 4:27

thefourtheye

198k●3737 gold badges●392392 silver badges●440440 bronze badges

3 Answers

order by

votes

Up vote

9

Down vote

Accepted

Looks like Python internally swaps the items. Check this program

a, b = [1, 2], [2, 3]

def func():

a, b = b, a

import dis

dis.dis(func)

Output

4 0 LOAD_FAST 0 (b)

3 LOAD_FAST 1 (a)

6 ROT_TWO

7 STORE_FAST 1 (a)

10 STORE_FAST 0 (b)

13 LOAD_CONST 0 (None)

16 RETURN_VALUE

So, Python pushes references from b and a in the stack with LOAD_FAST. So, now the top most element is the reference pointed by a and the next one is the reference pointed by b. Then it uses ROT_TWO to swap the top two elements of the stack. So, now, the top most element is the reference pointed by b and the next one is the reference pointed by a and then assigns the top two elements of the stack to a and b respectively with STORE_FAST.

That's how sorting is happening in the assignment statement, when the number of items we deal with is lesser than 4.

If the number of items is greater than or equal to four, it builds a tuple and unpacks the values. Check this program

a, b, c, d = [1, 2], [2, 3], [4, 5], [5, 6]

def func():

a, b, c, d = d, c, b, a

import dis

dis.dis(func)

Output

4 0 LOAD_FAST 0 (d)

3 LOAD_FAST 1 (c)

6 LOAD_FAST 2 (b)

9 LOAD_FAST 3 (a)

12 BUILD_TUPLE 4

15 UNPACK_SEQUENCE 4

18 STORE_FAST 3 (a)

21 STORE_FAST 2 (b)

24 STORE_FAST 1 (c)

27 STORE_FAST 0 (d)

30 LOAD_CONST 0 (None)

33 RETURN_VALUE

share improve this answer follow

answered

Dec 14 '13 at 11:59

thefourtheye

198k●3737 gold badges●392392 silver badges●440440 bronze badges edited

Dec 14 '13 at 13:01

@MartijnPieters That's why I had to make references in bold. – thefourtheye Dec 14 '13 at 12:51

@MartijnPieters Got you :) Please check my updated answer, including the tuple unpacking stuff. – thefourtheye Dec 14 '13 at 12:56

1

As

Similar questions